Выясните, на какие кластеры разбивается аудитория, и предложите методы работы с каждым кластером. Обратите внимание, что количество кластеров необходимо выбрать самостоятельно. В итоговом анализе должна содержаться информация о том, какие товары предпочитают различные кластеры клиентов и насколько на покупку влияет наличие скидки. Если работа некоторых методов занимает слишком много времени, рекомендуем взять случайную выборку строк из датасета (например, 100 000 строк) и построить кластеризацию на её основе.

0. Импорт библиотек¶

In [1]:
import pickle
import pandas as pd
import numpy as np
from sklearn.cluster import AgglomerativeClustering, KMeans
from kmodes.kprototypes import KPrototypes
from sklearn.manifold import TSNE
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import silhouette_score
from clustergram import Clustergram
import urbangrammar_graphics as ugg
import seaborn as sns
from sklearn.metrics import silhouette_score, calinski_harabasz_score, davies_bouldin_score

1. Загрузка данных¶

In [2]:
df_summary = pd.read_csv('data/df_clean.csv')
df_summary
Out[2]:
id product colour cost product_sex base_sale dt gender age education city personal_coef marketing_one no_discount marketing_two product_group has_anomaly
0 0 3378 9 13599 0 1 7 0 36 1 1201 0.5072 0 0 0 881 1
1 0 18351 11 1499 3 0 37 0 36 1 1201 0.5072 0 0 0 5411 0
2 0 12608 0 4799 3 0 37 0 36 1 1201 0.5072 0 0 0 3196 0
3 3 2870 1 1599 1 0 13 1 31 1 1134 0.4304 0 0 0 803 0
4 3 12549 19 7199 3 0 27 1 31 1 1134 0.4304 0 0 0 3181 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
780108 178004 13747 12 12 3 0 20 1 52 0 1188 0.4688 0 0 0 3735 0
780109 178004 9151 9 5999 1 0 9 1 52 0 1188 0.4688 0 0 0 2411 0
780110 178004 9367 9 13999 1 0 6 1 52 0 1188 0.4688 0 0 0 2422 1
780111 178004 5556 9 8699 1 0 9 1 52 0 1188 0.4688 0 0 0 1683 0
780112 178004 15114 34 7999 1 0 20 1 52 0 1188 0.4688 0 0 0 4322 0

780113 rows × 17 columns

Загрузка соответствий категориальных переменных¶

In [3]:
# считаем данные pickle-формате
with open('data/mappings.pickle', 'rb') as f:
    mappings = pickle.load(f)

mappings
Out[3]:
{'product': {'8 батареек GP, АА, 8 шт.': 0,
  'Apple Watch Series 8, 41 мм, корпус из алюминия': 1,
  'Apple Watch Series 8, 41 мм, корпус из алюминия, спортивный ремешок в комплекте': 2,
  'BCAA : Апельсин': 3,
  'BCAA : Лимон': 4,
  'Basketball ball Wilson NBA Authentic Series Outdoor': 5,
  'Bike computer Stern CBC-5 5 functions black': 6,
  'Cамокат Nitro Circus Ryan Williams 500, 120 мм': 7,
  'Cамокат Nitro Circus Ryan Williams 560, 120 мм': 8,
  'Cамокат Nitro Circus Ryan Williams Jr. 100 мм': 9,
  'Cамокат Nitro Circus Ryan Williams, 110 мм': 10,
  'Cдвоенный массажный мяч Trigger Point MB2': 11,
  'Cмазка силиконовая для беговых дорожек Daytona': 12,
  'Cноуборд Salomon Sickstick': 13,
  'Cуппорт колена LP': 14,
  'Demix fitness gloves red': 15,
  'Demix 袜子,3 双黑色': 16,
  'FILA socks, 3 pairs black/white': 17,
  'FILA 蓝色男士泳裤': 18,
  'Futsal ball Mikasa FSC-62': 19,
  'Giày nam Demix Exponenta 3 Fg đỏ/trắng': 20,
  'Giày thể thao PUMA Twitch Runner dành cho nữ Màu hồng / trắng / đen tươi': 21,
  'Gladiator BIG Sup 17.0': 22,
  'Gladiator DUO 15.2': 23,
  'Gladiator ELITE 11.2': 24,
  'Gladiator ELITE 11.6': 25,
  'Gladiator ELITE 12.6LT': 26,
  'Gladiator ELITE 12.6S': 27,
  'Gladiator ELITE 14.0S': 28,
  'Gladiator ELITE KD 11.6R': 29,
  'Gladiator ORIGIN 10.6SC': 30,
  'Gladiator ORIGIN 12.6S SC': 31,
  'Gladiator ORIGIN 12.6T SC': 32,
  'Gladiator PRO 11.2': 33,
  'Gladiator PRO 11.4': 34,
  'Gladiator PRO 12.6T': 35,
  'Gladiator WIND 10.7': 36,
  'Gladiator WIND 11.6': 37,
  'Joss Joy 深蓝色拖鞋': 38,
  'Kлюшка CCM JetSpeed FT5 SR': 39,
  'Kлюшка CCM Jetspeed 465, Flex 85, P29': 40,
  'Kлюшка CCM Jetspeed 475, Flex 75, P29': 41,
  'Kлюшка CCM Jetspeed FT3 Pro, Flex 75, P29': 42,
  'Kлюшка CCM Jetspeed FT4 Pro, Flex 70, P29': 43,
  'Kлюшка CCM Jetspeed FT440, Flex 85, P29': 44,
  'Kлюшка CCM Ribcor Trigger 5 Pro, Flex 85, P29': 45,
  'Kлюшка CCM Super Tacks AS4 Pro, Flex 75, P28': 46,
  'Kлюшка CCM SuperTacks 9360, Flex 75, P29': 47,
  'Kлюшка CCM SuperTacks 9380, Flex 85, P29': 48,
  'Kлюшка CCM SuperTacks AS1, Flex 85, P29': 49,
  'Kлюшка CCM SuperTacks AS3 Pro, Flex 85, P29': 50,
  'Kлюшка CCM SuperTacks Tacks 2.0, Flex 45, P28': 51,
  'Kлюшка MadGuy Ghost, Flex 80, P92': 52,
  'Kлюшка детская CCM Jetspeed 475, Flex 40, P29': 53,
  'Kлюшка детская CCM Jetspeed 475, Flex 50, P29': 54,
  'Kлюшка детская CCM Jetspeed FT4 Pro, Flex 30, P28': 55,
  'Kлюшка детская CCM SuperTacks 9360, Flex 40, P29': 56,
  'L-Carnitine Vplab nutrition, 90 капсул': 57,
  'Low shoes for men Caterpillar Downlink Canvas blue/white': 58,
  'Low shoes for men Outventure Lighttrack Pro black color': 59,
  'Maxler Marine Collagen + Hyaluronic Acid Complex морской коллаген/гиалуроновая кислота/витамин С. 120 мягких капсул': 60,
  'Maxler Marine Collagen + Hyaluronic Acid Complex морской коллаген/гиалуроновая кислота/витамин С. 60 мягких капсул': 61,
  'Maxler VitaWomen витамины для женщин. 90 таблеток': 62,
  "Men's windbreaker Outventure dark blue color": 63,
  'Nike Value Cotton Crew socks, 3 pairs': 64,
  'PUMA 4Keeps sports bra top lavender color': 65,
  'Quần tây nam FILA đen': 66,
  'SIS POWDER BETA FUEL, напиток высокоуглеводный в порошке, вкус Клубника&Лайм, 82 гр.': 67,
  "SUP Easy Rider Black Shadow 11'6": 68,
  "SUP Easy Rider Lady 11'": 69,
  "SUP Easy Rider Marine Cruiser 11'6": 70,
  "SUP Easy Rider Red Fury 12'6": 71,
  "SUP Easy Rider Turtle 10'6": 72,
  "SUP Easy Rider Universe 11'6": 73,
  "SUP Easy Rider Vladivostok 11'6": 74,
  "SUP Easy Rider WAVE 10'6 Acid": 75,
  "SUP Easy Rider WAVE 10'6 Green": 76,
  "SUP Easy Rider WAVE 10'6 Haki": 77,
  "SUP Easy Rider WAVE 10'6 Mint": 78,
  "SUP Easy Rider WAVE 10'6 Pink": 79,
  "SUP Easy Rider WAVE 10'6 Purple": 80,
  "SUP Easy Rider WAVE 10'6 Red": 81,
  "SUP Easy Rider WAVE 10'6 White": 82,
  "SUP Easy Rider WAVE 10'6 Yellow": 83,
  "SUP Hiken Water Race 14' Pro": 84,
  "SUP Hiken Water Touring 11'6 Advance": 85,
  "SUP Hiken Water Touring 11'6 Aquamarine": 86,
  "SUP Hiken Water Touring 11'6 Blue Monstera": 87,
  "SUP Hiken Water Touring 11'6 Red": 88,
  "SUP Hiken Water Touring 11'6 Yellow": 89,
  "SUP Hiken Water Wind SUP 10'8 Red": 90,
  "SUP Hiken Water Wind SUP 11'6 Yellow": 91,
  'SUP PRIME 10\'5*34"*6" CLASSIC blue': 92,
  'SUP PRIME 10\'5*34"*6" CLASSIC purple': 93,
  'SUP PRIME 10\'5*34"*6" CLASSIC yellow': 94,
  'SUP PRIME 9\'*30"*4" SURF blue': 95,
  'SUP PRIME 9\'*30"*4" SURF purple': 96,
  'SUP PRIME 9\'*30"*4" SURF yellow': 97,
  'SUP PRIME RENTAL 10\'5*34"*6" blue': 98,
  'SUP TERROR 10\'6*33"*6" COMPASS blue': 99,
  'SUP TERROR 11\'*32"*6" FORDEWIND red': 100,
  'SUP TERROR 12\'6"29"6" RACE yellow': 101,
  'SUP TERROR 14\'28"6" CAPTAIN blue': 102,
  'SUP надувной Adventum 10.4': 103,
  'SUP надувной Adventum 10.6': 104,
  'SUP надувной Adventum 10.8': 105,
  'SUP надувной Aqua Marina Atlas': 106,
  'SUP надувной Aqua Marina Coral': 107,
  'SUP надувной Aqua Marina Fusion': 108,
  'SUP надувной Aqua Marina Magma': 109,
  "SUP надувной Aqua Marina Magma 10' 10''": 110,
  'SUP надувной Aztron Nova 2.0 Compact All Around iSUP': 111,
  'SUP надувной Aztron Super Nova Compact All Around iSUP': 112,
  'SUP надувной Aztron Terra Touring': 113,
  'SUP надувной Aztron Titan All Around iSUP': 114,
  'SUP надувной Bestway Hydro-Force Aqua Glide': 115,
  'SUP надувной Bestway Hydro-Force Breeze Panorama': 116,
  'SUP надувной Bestway Hydro-Force Freesoul': 117,
  "SUP надувной Bestway Hydro-Force HuaKa'i": 118,
  'SUP надувной Bestway Hydro-Force Kahawai': 119,
  'SUP надувной Bestway Hydro-Force Oceana': 120,
  'SUP надувной Bestway Hydro-Force Sea Breeze': 121,
  'SUP надувной Gladiator DUO 15.2': 122,
  'SUP надувной Gladiator ELITE 11.2': 123,
  'SUP надувной Gladiator ELITE 11.6': 124,
  'SUP надувной Gladiator ELITE 12.6LT': 125,
  'SUP надувной Gladiator ELITE 12.6S': 126,
  'SUP надувной Gladiator ELITE 14.0R': 127,
  'SUP надувной Gladiator Elite 11.4': 128,
  'SUP надувной Gladiator Elite 12.6T': 129,
  'SUP надувной Gladiator OR10.8': 130,
  'SUP надувной Gladiator ORIGIN 12.6S SC': 131,
  'SUP надувной Gladiator ORIGIN 12.6T SC': 132,
  'SUP надувной Gladiator Origin 10’6': 133,
  'SUP надувной Gladiator PRO 11.2': 134,
  'SUP надувной Gladiator PRO 11.6': 135,
  'SUP надувной Gladiator PRO 12.6LT': 136,
  'SUP надувной Gladiator PRO 12.6T': 137,
  'SUP надувной Gladiator Pro 10.8': 138,
  'SUP надувной Gladiator WIND 10.7': 139,
  'SUP надувной Greenhouse, 335х83х15см': 140,
  'SUP надувной Greenhouse, 335х83х15см розовый,': 141,
  'SUP надувной Greenhouse, 335х83х15см синий,': 142,
  'SUP надувной Greenhouse, 335х83х15см черный,': 143,
  'SUP надувной HIPER Deck 425х85х15 см коричневый, бежевый,': 144,
  'SUP надувной HIPER Deck Mini 355х75х15 см': 145,
  'SUP надувной HIPER Deck Mini 355х75х15 см коричневый, бежевый,': 146,
  'SUP надувной HIPER Glacier 245х65х10 см': 147,
  'SUP надувной HIPER Vessel 320х81х15 см белый, красный,': 148,
  'SUP надувной HIPER Vessel Mini 305х81х15 см белый, красный,': 149,
  'SUP надувной Jobe Aero Loa': 150,
  'SUP надувной детский Adventum Kids 8.0': 151,
  'SUP надувной детский Adventum Kids 9.0': 152,
  'SUP надувной детский Gladiator KD 9.6': 153,
  'SUP надувной\xa0Bestway Aqua Glide': 154,
  'SUP надувной\xa0Bestway Breeze Panorama': 155,
  'SUP надувной\xa0Bestway Freesoul': 156,
  "SUP надувной\xa0Bestway HuaKa'i": 157,
  'SUP надувной\xa0Bestway Kahawai': 158,
  'SUP надувной\xa0Bestway Oceana': 159,
  'SUP надувной\xa0Bestway Sea Breeze': 160,
  "SUP надувной\xa0Beyond Marina Discovery 10'6 Mint Green": 161,
  "SUP надувной\xa0GQ Board COCO 11'0": 162,
  "SUP надувной\xa0GQ Board RD 11'0": 163,
  'SUP надувной\xa0JS Board 335': 164,
  'SUP надувной\xa0JS Board 335 Arctic': 165,
  'SUP надувной\xa0JS Board 335 Ninja': 166,
  'SUP надувной\xa0JS Board RQ335': 167,
  "SUP надувной\xa0Koetsu mint 10'6": 168,
  'Set for table tennis Torneo Hobby multicolor color': 169,
  'Sneakers for women PUMA Rbd Game Low white/gray/lavender color': 170,
  'Socks PUMA Outlets, 3 pairs': 171,
  'Sports bra top Demix purple color': 172,
  'T-shirt for boys Termit red': 173,
  'T-shirt for men FILA Essentials black color': 174,
  'Termit HawaII 蓝色/米色男士拖鞋': 175,
  'Trousers for boys Demix black color': 176,
  "Women's T-shirt Outventure bright blue": 177,
  "Women's beach jumpsuit Termit blue/green": 178,
  'Адаптер для багажника Topeak Omni QuickTrack': 179,
  'Адаптер под флягодержатель TOPEAK': 180,
  'Адаптер под цанговый баллон Fire-Maple': 181,
  'Адаптеры Outventure': 182,
  'Аквагрим для болельщиков Fanbrush, 3 цвета': 183,
  'Аквагримм карандаш для лица Wilson': 184,
  'Аккумулятор Li-ion Fenix ARB-L14-1600U 14500': 185,
  'Аккумулятор Li-ion Fenix ARB-L18-2600 18650': 186,
  'Аккумулятор Li-ion Fenix ARB-L18-3500U 18650': 187,
  'Аккумулятор переносной Outventure': 188,
  'Аккумулятор холода Nordway': 189,
  'Аккумулятор холода Outventure': 190,
  'Аккумулятор холода Outventure, 2021': 191,
  'Активная пена для очищения белой обуви, кроссовок Salton Sport, 200 мл': 192,
  'Альфа-липоевая кислота MyChoice Nutrition': 193,
  'Аминокислота / Глютамин / Glutamine / PureProtein / 200 г / Апельсин': 194,
  'Аминокислота / Глютамин / Glutamine / PureProtein / 200 г / Лесные ягоды': 195,
  'Аминокислота 5-HTP и магний, VP Laboratory/ VPLAB, 5-гидрокситриптофан, здоровый сон и контроль веса, 60 капсул': 196,
  'Аминокислота Maxler Arginine 1000 MAX (Аргинин) 100 таблеток': 197,
  'Аминокислота Rline БЦАА': 198,
  'Аминокислота Бета-аланин VPLAB Beta-alanine, спортивное питание, предтренировочный препарат, выносливость и сила, 90 капсул': 199,
  'Аминокислота Л-аргинин, VPLAB AAKG, спортивное питание, предтренировочный препарат, рост мышечной массы и выносливость, 90 таблеток': 200,
  'Аминокислота Л-глутамин, VPLAB L-Glutamine, спортивное питание, рост мышечной массы и выносливость, 300 г': 201,
  'Аминокислоты / BCAA / БЦАА / PureProtein / 200 г / Апельсин': 202,
  'Аминокислоты / BCAA / БЦАА / Порции: 40х5 г или 20х10 г / PureProtein / 200 г / Лимон': 203,
  'Аминокислоты Maxler 100% Golden BCAA (2:1:1) 210 гр. Апельсин': 204,
  'Аминокислоты Maxler 100% Golden BCAA (2:1:1) 210 гр. Клубника': 205,
  'Аминокислоты Maxler 100% Golden BCAA (2:1:1) 420 гр. Клубника': 206,
  'Аминокислоты VPLAB BCAA 2:1:1, аминокислотный комплекс, 300 г, арбуз': 207,
  'Аминокислоты VPLAB BCAA 2:1:1, аминокислотный комплекс, 300 г, виноград': 208,
  'Аминокислоты VPLAB BCAA 2:1:1, аминокислотный комплекс, 300 г, малина': 209,
  'Аминокислоты Vplab nutrition, апельсин': 210,
  'Аминокислоты Vplab nutrition, манго': 211,
  'Аминокислоты Vplab nutrition, фруктовый пунш': 212,
  'Анорак двусторонний мужской Termit': 213,
  'Анорак для девочек Termit': 214,
  'Анорак для мальчиков FILA': 215,
  'Анорак для мальчиков Kappa': 216,
  'Анорак для мальчиков Nike': 217,
  'Анорак для мальчиков Protest Prtcleytons': 218,
  'Анорак женский 686 Upton Insulated': 219,
  "Анорак женский ARC'TERYX Alpha SL": 220,
  "Анорак женский ARC'TERYX Venda": 221,
  "Анорак женский Arc'teryx Alpha SL": 222,
  'Анорак женский DC Shoes': 223,
  'Анорак женский IcePeak Cesena': 224,
  'Анорак женский Mountain Hardwear Firefall/2™ Anorak': 225,
  'Анорак женский Mountain Hardwear Rock Intelligence™ Hybrid Hoody': 226,
  'Анорак женский Peak Performance': 227,
  'Анорак женский Protest': 228,
  'Анорак женский Protest Prtmoorena': 229,
  'Анорак женский Termit': 230,
  'Анорак женский Under Armour Define The Run Storm Anorak': 231,
  'Анорак женский Vans X Napapijri': 232,
  'Анорак мужской 686 Renewal': 233,
  'Анорак мужской Burton Frostner': 234,
  'Анорак мужской Columbia Buckhollow': 235,
  'Анорак мужской Columbia Buckhollow Insulated Anorak': 236,
  'Анорак мужской DC Shoes Thieves': 237,
  'Анорак мужской DC Shoes Transition': 238,
  'Анорак мужской Ellesse Amalfon': 239,
  'Анорак мужской Fjallraven Vardag': 240,
  'Анорак мужской IcePeak Alnati': 241,
  'Анорак мужской IcePeak Chelan': 242,
  'Анорак мужской Kappa': 243,
  'Анорак мужской Merrell': 244,
  'Анорак мужской Northland': 245,
  'Анорак мужской Peak Performance Stowaway': 246,
  'Анорак мужской Protest': 247,
  'Анорак мужской Protest Prtcomo': 248,
  'Анорак мужской Protest Prtgeneva': 249,
  'Анорак мужской Protest Prtlostan': 250,
  'Анорак мужской Salomon Gravity Insul Gtx®': 251,
  'Анорак мужской Salomon Outlife': 252,
  'Анорак мужской Termit': 253,
  'Анорак мужской The North Face Waterproof': 254,
  'Анорак мужской Under Armour Woven Asym': 255,
  'Антибактериальные салфетки Reloa': 256,
  'Антифог Joss': 257,
  'Антифог для визора MadGuy': 258,
  'Аптечка Tatonka First Aid "M"': 259,
  'Аптечка Tatonka First Aid Family': 260,
  'Аэрозоль "Защита территории" Gardex Raptor, 400 мл': 261,
  'Аэрозоль детский Gardex, 75 мл': 262,
  'Аэрозоль от всех кровососущих насекомых и клещей Insectoff': 263,
  'Аэрозоль от клещей Gardex Extreme, 150 мл': 264,
  'Аэрозоль от клещей и комаров Insectoff': 265,
  'Аэрозоль от комаров Gardex Family Sensitive, 150 мл': 266,
  'Аэрозоль от комаров OFF! Family, 100 мл': 267,
  'Аэрозоль от комаров и клещей OFF! Extreme, 100 мл': 268,
  'Аэрозоль от комаров и мошек Insectoff': 269,
  'Аэрозоль от летающих насекомых Raid, 300 мл': 270,
  'Аэрозоль-репеллент Gardex, 150 мл': 271,
  'Аэрозоль-репеллент от комаров Gardex Extreme, 100 мл': 272,
  'БУтсы мужские PUMA Ultra Match IT': 273,
  'Багажник Stern': 274,
  'Багажник Stern 20"': 275,
  'Багажник Stern 26"': 276,
  'Багажник Stern CCAR-1N': 277,
  'Багажник Stern CCAR-2': 278,
  'Багажник Stern CCAR-2N': 279,
  'Багажник Stern CCAR-3': 280,
  'Багажник TOPEAK': 281,
  'Багажник Topeak': 282,
  'Багажник на велосипед TOPEAK Uni SuperTourist 24-29"': 283,
  'Багажник на велосипед Topeak M1': 284,
  'Багажник на велосипед Topeak M2': 285,
  'Базовая намотка Babolat Syntec Team': 286,
  'Базовая намотка Wilson SUBLIME GRIP': 287,
  'Базовый клистер спрей Swix KB20C': 288,
  'Байдарка Вольный Ветер "Ангара 360 Expedition", красный': 289,
  'Байдарка Вольный Ветер "Ангара 360 Expedition", оранжевый': 290,
  'Байдарка Вольный Ветер "Ангара 480 Expedition", оранжевый': 291,
  'Байдарка Вольный Ветер "Ангара 480 Expedition", хаки': 292,
  'Байдарка Вольный Ветер "Ангара 540 Expedition", серый': 293,
  'Байдарка Вольный Ветер "Ангара 540 Travel", оранжевый': 294,
  'Байдарка Вольный Ветер "Ангара 540 Travel", хаки': 295,
  'Байдарка Вольный Ветер "Ермак 450", красный': 296,
  'Байдарка Вольный Ветер "Ермак 450", оранжевый': 297,
  'Байдарка Вольный Ветер "Ермак 450", хаки': 298,
  'Байдарка Вольный Ветер "Ермак 600", оранжевый': 299,
  'Байдарка Вольный Ветер "Ермак 600", серый': 300,
  'Байдарка Вольный Ветер "Одиссей 370", красный': 301,
  'Байдарка Вольный Ветер "Тайга 430", красный': 302,
  'Байдарка Вольный Ветер "Тайга 430", красный красный,': 303,
  'Байдарка Вольный Ветер "Тайга 430", синий': 304,
  'Байдарка Вольный Ветер "Тайга 430", синий синий,': 305,
  'Байдарка Вольный Ветер "Тайга 430", хаки': 306,
  'Байдарка Вольный Ветер Ангара Expedition 540': 307,
  'Байдарка Вольный Ветер Ангара Travel 360': 308,
  'Байдарка Вольный Ветер Ангара Travel 540': 309,
  'Байдарка Вольный Ветер Ермак 260, серый': 310,
  'Байдарка Вольный Ветер Ермак 260, хаки': 311,
  'Байдарка Вольный Ветер Тайга 340': 312,
  'Байдарка Вольный ветер "Тайга 520", красный': 313,
  'Байдарка Вольный ветер "Тайга 520", красный красный,': 314,
  'Байдарка Вольный ветер Ермак 340': 315,
  'Байдарка Вольный ветер Ермак 540': 316,
  'Байдарка Вольный ветер Одиссей 480': 317,
  'Байдарка КН "Шуя-1"': 318,
  'Байдарка КН "Шуя-3"': 319,
  'Байдарка Тритон Вектор-2': 320,
  'Байдарка Тритон Вуокса Н-2': 321,
  'Байдарка Тритон Вуокса Н-3': 322,
  'Байдарка Тритон Легор': 323,
  'Байдарка Тритон Нева-2': 324,
  'Байдарка Тритон Нева-3': 325,
  'Байдарка Тритон Шуя-1': 326,
  'Байдарка Тритон Шуя-2': 327,
  'Байдарка Тритон Шуя-3': 328,
  'Бакл для строп Outventure': 329,
  'Бакл для строп Outventure, 2021': 330,
  'Бакля под гребенку Nidecker до 28 мм, шаг 5 мм': 331,
  'Бактерицидный лейкопластырь TENERIS ANTISHOCK с ионами серебра на полимерной основе, 20 шт': 332,
  'Бактерицидный лейкопластырь TENERIS AQUA Silver с ионами серебра на прозрачной полимерной основе, 20 шт': 333,
  'Бактерицидный лейкопластырь TENERIS COMFORT FLEX с ионами серебра на суперэластичной полимерной основе, 20шт': 334,
  'Бактерицидный лейкопластырь TENERIS ELASTIC с ионами серебра на тканевой основе, 20 шт': 335,
  'Бактерицидный лейкопластырь TENERIS FUN KIDS с ионами серебра на полимерной основе с рисунками, 20 шт': 336,
  'Бактерицидный лейкопластырь TENERIS SENSITIVE с ионами серебра на нетканой основе, 20 шт': 337,
  'Балаклава Airhole 3+1 Airhood Microfleece': 338,
  'Балаклава Airhole Airhood': 339,
  'Балаклава Airhole Airhood 3+5': 340,
  'Балаклава Airhole Airtube Ergo': 341,
  'Балаклава Airhole Airtube Ergo Polar': 342,
  'Балаклава Airhole Airtube Microfleece': 343,
  'Балаклава Airhole Balaclava Combo': 344,
  'Балаклава Airhole Balaclava Hinge': 345,
  'Балаклава Airhole Facemask Standard': 346,
  'Балаклава Airhole Full Hinge Waffle Knit': 347,
  'Балаклава Airhole Hinge': 348,
  'Балаклава Airhole Hinge Drylite': 349,
  'Балаклава Airhole Standard - 2 Layer': 350,
  'Балаклава Aucrux Wind PRO 1BLB': 351,
  'Балаклава Columbia Titanium II Balaclava': 352,
  'Балаклава Demix': 353,
  'Балаклава Glissade': 354,
  'Балаклава Salomon': 355,
  'Балаклава Termit': 356,
  'Балаклава WIND PRO 1BLB': 357,
  'Балаклава Ziener': 358,
  'Балаклава детская Airhole Airhood Milk Fleece': 359,
  'Балаклава детская Glissade': 360,
  'Балаклава детская Termit': 361,
  'Баланс борд "PRO balance" Blanc logo': 362,
  'Баланс борд "PRO balance" Freeride Tour GS': 363,
  'Баланс борд "PRO balance" Milena GS': 364,
  'Баланс борд "PRO balance" Mountain GS': 365,
  'Баланс борд "PRO balance" Shaka GS': 366,
  'Баланс борд "PRO balance" Ski Eight GS': 367,
  'Баланс борд "PRO balance" Snowboard GS': 368,
  'Баланс борд "PRO balance" Surf Eight GS': 369,
  'Баланс борд "PRO balance" Surf GS': 370,
  'Баланс борд "PRO balance" Wake GS': 371,
  'Баланс борд "Pro balance" Supboarding GS': 372,
  'Баланс борд EvolutionONE ART WOOD + 2 ролика': 373,
  'Баланс борд EvolutionONE ART WOOD с одним роликом': 374,
  'Баланс борд EvolutionONE BLACK SERF + 2 ролика': 375,
  'Баланс борд EvolutionONE ШТОРМ с одним роликом': 376,
  'Баланс борд EvolutionOne ЭКСПЕДИЦИЯ + 2 ролика': 377,
  'Баланс борд INDSPACE НЛО на сфере и с вращением на 360 градусов': 378,
  'Баланс борд IndSpace SNOWBOARD + 2 ролика': 379,
  'Баланс борд IndSpace ХОККЕЙ с одним роликом': 380,
  'Балансировочная платформа Jobstick Fun': 381,
  'Балансировочная платформа KETTLER': 382,
  'Балансировочная полусфера Demix': 383,
  'Балансировочный диск Demix': 384,
  'Балетки для девочек Demix Sweet 2': 385,
  'Балетки для девочек GSD Befly': 386,
  'Балетки женские Demix Ballerina': 387,
  'Балетки женские Demix Ballerina 2': 388,
  'Балетки женские Demix Ballerina Knit': 389,
  'Балетки женские Demix Ballerina Mesh': 390,
  'Баллон газовый Fire-Maple': 391,
  'Баллон газовый Следопыт': 392,
  'Баллон газовый зимний Следопыт 220 г': 393,
  'Бандаж Everlast 1910 Black Groin H&L': 394,
  'Бандана': 395,
  'Бандана Airhole Standard - 2 Layer': 396,
  'Бандана Aucrux 1.0BND': 397,
  'Бандана Aucrux 1.1BND': 398,
  'Бандана Aucrux 1.2BND': 399,
  'Бандана Aucrux 1.3BND': 400,
  'Бандана Aucrux 1.4BND': 401,
  'Бандана Aucrux 1.5BND': 402,
  'Бандана Aucrux 1.6BND': 403,
  'Бандана Aucrux 1.7BND': 404,
  'Бандана Aucrux 1.8BND': 405,
  'Бандана детская Outventure': 406,
  'Бандана для девочек Outventure': 407,
  'Банка для хранения ленты Howies': 408,
  'Барабан Shimano для FH-M495 с пыльником': 409,
  'Барабан Shimano для FH-M760 с пыльником': 410,
  'Барабан Shimano для FH-RM30-7S с пыльником': 411,
  'Барьер тренировочный Demix': 412,
  'Барьер тренировочный Demix, 15 см, 3 шт.': 413,
  'Барьер тренировочный Demix, 3 уровня, 1 шт.': 414,
  'Барьер тренировочный Demix, 30 см, 3 шт.': 415,
  'Барьер тренировочный Demix, 45 см, 3 шт.': 416,
  'Барьер тренировочный SKLZ Speed Hurdles Pro': 417,
  'Баскетбольный мяч All Court 2.0 adidas': 418,
  'Бассеин Intex': 419,
  'Бассейн Bestway': 420,
  'Бассейн Bestway 170 см': 421,
  'Бассейн Intex': 422,
  'Бассейн Intex 188 см': 423,
  'Бассейн Intex Easy set': 424,
  'Батарейки литиевые Duracell 2032 3V Б0037273, 2 шт.': 425,
  'Батарейки литиевые GP CR2032-CRU2 Lithium, 2 шт.': 426,
  'Батарейки щелочные Duracell Basic C/LR14, 2 шт.': 427,
  'Батарейки щелочные Duracell Basic D/LR20, 2 шт.': 428,
  'Батарейки щелочные Duracell Optimum АА, 4 шт.': 429,
  'Батарейки щелочные Duracell Optimum ААА, 4 шт.': 430,
  'Батарейки щелочные Duracell Turbo AA/LR06, 2 шт.': 431,
  'Батарейки щелочные Duracell Turbo AA/LR06, 4 шт.': 432,
  'Батарейки щелочные Duracell Ultra АА, 2 шт.': 433,
  'Батарейки щелочные Duracell Ultra АА, 4 шт.': 434,
  'Батарейки щелочные Duracell Ultra ААА, 2 шт.': 435,
  'Батарейки щелочные Duracell Ultra ААА, 4 шт.': 436,
  'Батарейки щелочные Duracell АА, 4 шт.': 437,
  'Батарейки щелочные Duracell ААА, 4 шт.': 438,
  'Батарейки щелочные GP LR03-CR4 Extra, 4 шт.': 439,
  'Батарейки щелочные GP LR03-CR4 Super, 4 шт.': 440,
  'Батарейки щелочные GP LR03-CR8 Super Alkaline, ААА, 8 шт.': 441,
  'Батарейки щелочные GP LR03-CR8 Super, 8 шт.': 442,
  'Батарейки щелочные GP LR6-CR4 Super, 4 шт.': 443,
  'Батончик протеиновый Forsio "Ананас" 40 г': 444,
  'Батончик протеиновый Forsio "Брауни и арахис", 30 г': 445,
  'Батончик протеиновый Forsio "Гуарана" 40 г': 446,
  'Батончик протеиновый Forsio "Джем и карамель" 40 г': 447,
  'Батончик протеиновый Forsio "Какао пудинг" 60 г': 448,
  'Батончик протеиновый Forsio "Манго и карамель" 40 г': 449,
  'Батончик протеиновый Forsio "Фисташковое мороженое" 50 г': 450,
  'Батончик протеиновый Forsio "Шоколад" 40 г': 451,
  'Батончик протеиновый Forsio "Яблочный пирог и корица", 30 г': 452,
  'Батончик протеиновый Forsio 40 г, 30 шт.': 453,
  'Батончик протеиновый Powers "Гречневый" 60 г': 454,
  'Батончик протеиновый Powers "Кокос"': 455,
  'Батончик протеиновый низкокалорийный Forsio "Клубничная нуга с криспами" 40 г': 456,
  'Батончик с L-карнитином Forsio "Манго" 40 г': 457,
  'Батончики Snaq Fabriq в шоколаде "SNAQER" "Ассорти mini", 50 гр. х 6': 458,
  'Батончики Snaq Fabriq в шоколаде "SNAQER" со вкусом "Фисташка и карамель", 50 гр. х 12': 459,
  'Батончики Snaq Fabriq в шоколаде "SNAQER" со вкусом "Фундук и карамель", 50 гр. х 12': 460,
  'Батончики КЕТО "BOMBBAR" "Ассорти", 40г х 12 шт': 461,
  'Батончики КЕТО Bombbar "Ассорти", 40г х 12 шт': 462,
  'Батончики в шоколаде "SNAQER" со вкусом "Арахис и карамель", 50 гр. х 12': 463,
  'Батончики протеиновые Forsio "Кокос" 40 г, 25 шт': 464,
  'Батончики протеиновые Forsio "Шоколад" 40 г, 25 шт': 465,
  'Батут KETTLER Wallaroo-10Ft с внутренней сеткой, 305 см': 466,
  'Батут KETTLER Wallaroo-12Ft с внутренней сеткой, 366 см': 467,
  'Батут KETTLER Wallaroo-8Ft с внутренней сеткой, 244 см': 468,
  'Батут StartLine Fitness 10 футов (305 см) складной с внешней сеткой': 469,
  'Батут Torneo A-903 102 см': 470,
  'Батут Torneo складной': 471,
  'Батут Torneo, 102 см': 472,
  'Батут с внешней сеткой START LINE, 244 см': 473,
  'Батут складной Torneo A-904 102 см': 474,
  'Баул The North Face Base Camp Duffel': 475,
  'Баул хоккейный Nordway 32"': 476,
  'Баул хоккейный Nordway 36"': 477,
  'Баул хоккейный ССМ 390 Player Wheel Gear': 478,
  'Бафф Aucrux Polartec 4.2PB': 479,
  'Бафф Aucrux Polartec 6.0PB': 480,
  'Бафф Aucrux Polartec 9.3PG': 481,
  'Бафф Aucrux Polartec Neckwarmer 1PNB': 482,
  'Бафф Aucrux Polartec Neckwarmer 1PNO': 483,
  'Бафф Aucrux Polartec Neckwarmer 1PNS': 484,
  'Бафф Aucrux Polartec Neckwarmer 1PNW': 485,
  'Бафф Aucrux Reversible 1RB': 486,
  'Бафф Aucrux Reversible 4.0RB': 487,
  'Бафф Aucrux Reversible 4.2RB': 488,
  'Бафф Aucrux Reversible 6.0RB': 489,
  'Бафф Aucrux Reversible 6.1RB': 490,
  'Бафф Aucrux Standard 11.0S': 491,
  'Бафф Aucrux Standard 11.3S': 492,
  'Бафф Aucrux Standard 12.0S': 493,
  'Бафф Aucrux Standard 12.2S': 494,
  'Бафф Aucrux Standard 15.0S': 495,
  'Бафф Aucrux Standard 2S': 496,
  'Бафф Aucrux Standard 4.0S': 497,
  'Бафф Aucrux Standard 4.1S': 498,
  'Бафф Aucrux Standard 4.2S': 499,
  'Бафф Aucrux Standard 4.5S': 500,
  'Бафф Aucrux Standard 6.1S': 501,
  'Бафф Aucrux Standard 6.2S': 502,
  'Бафф Aucrux Standard 9.0S': 503,
  'Бафф Aucrux Standard 9.1S': 504,
  'Бафф Aucrux Standard 9.2S': 505,
  'Бафф Aucrux Standard Pro1': 506,
  'Бафф Aucrux Standard Pro2': 507,
  'Бафф Aucrux Standard Pro4': 508,
  'Бафф Aucrux Standard Pro5': 509,
  'Бафф POLARTEC 4.2PB': 510,
  'Бафф POLARTEC 4.5PB': 511,
  'Бафф POLARTEC 6.0PB': 512,
  'Бафф POLARTEC 9.3PG': 513,
  'Бафф POLARTEC NECKWARMER 1PNS': 514,
  'Бафф POLARTEC NECKWARMER 1PNW': 515,
  'Бафф REVERSIBLE 1RB': 516,
  'Бафф REVERSIBLE 6.1RB': 517,
  'Бафф STANDARD 11.0S': 518,
  'Бафф STANDARD 11.3S': 519,
  'Бафф STANDARD 15.0S': 520,
  'Бафф STANDARD 2S': 521,
  'Бафф STANDARD 4.0S': 522,
  'Бафф STANDARD 4.2S': 523,
  'Бафф STANDARD 9.0S': 524,
  'Бафф STANDARD Pro4': 525,
  'Бафф мужской Kappa Antun 2': 526,
  'Беговая дорожка Inita T-155': 527,
  'Беговая дорожка KETTLER Air R1': 528,
  'Беговая дорожка KETTLER Incline Track R10': 529,
  'Беговая дорожка KETTLER Smart W2': 530,
  'Беговая дорожка KETTLER Sprinter 2.0': 531,
  'Беговая дорожка KETTLER TRACK S10': 532,
  'Беговая дорожка KETTLER TRACK S4': 533,
  'Беговая дорожка KETTLER TRACK S6': 534,
  'Беговая дорожка KETTLER Track R3': 535,
  'Беговая дорожка KETTLER Track R9': 536,
  'Беговая дорожка KETTLER Track S10': 537,
  'Беговая дорожка KETTLER Track S4': 538,
  'Беговая дорожка KETTLER Track S6': 539,
  'Беговая дорожка KETTLER Track S8': 540,
  'Беговая дорожка Lifespan TR4000IC': 541,
  'Беговая дорожка NordicTrack Commercial 1750': 542,
  'Беговая дорожка NordicTrack Commercial 2450': 543,
  'Беговая дорожка NordicTrack Elite 900': 544,
  'Беговая дорожка NordicTrack S25': 545,
  'Беговая дорожка PRO-FORM 305 CST': 546,
  'Беговая дорожка PRO-FORM Pro 2000': 547,
  'Беговая дорожка Pro-Form Trainer 8.0': 548,
  'Беговая дорожка Pro-Form Trainer 8.5': 549,
  'Беговая дорожка Torneo Cross': 550,
  'Беговая дорожка Torneo Cross T-108': 551,
  'Беговая дорожка Torneo Inita': 552,
  'Беговая дорожка Torneo Inita T-155': 553,
  'Беговая дорожка Torneo Maestra T-320': 554,
  'Беговая дорожка Torneo Magic T-411': 555,
  'Беговая дорожка Torneo Massage T-151': 556,
  'Беговая дорожка Torneo Nota': 557,
  'Беговая дорожка Torneo Nota T-310': 558,
  'Беговая дорожка Torneo Olympia': 559,
  'Беговая дорожка Torneo Olympia T-530BL': 560,
  'Беговая дорожка Torneo Selecta T-302': 561,
  'Беговая дорожка Torneo Smarta': 562,
  'Беговая дорожка Torneo Smarta T-205': 563,
  'Беговая дорожка Torneo Therapy T-300': 564,
  'Беговая дорожка складная KETTLER Smart S3': 565,
  'Беговая дорожка электрическая NordicTrack Commercial 2450': 566,
  'Беговая дорожка электрическая NordicTrack Commercial 2950': 567,
  'Беговая дорожка электрическая NordicTrack S 40': 568,
  'Беговая дорожка электрическая PRO-FORM Carbon T7': 569,
  'Беговая дорожка электрическая PRO-FORM Carbon TL': 570,
  'Беговел Globber GO BIKE AIR': 571,
  'Беговел Maxiscoo Rocket': 572,
  'Беговел Stern Kidster': 573,
  'Беговел Stern Kidster Alt 12"': 574,
  'Беговел детский BENTLEY Balance 12"': 575,
  'Беговел детский MAXISCOO Comet Делюкс Плюс': 576,
  'Беговел детский MAXISCOO Comet Стандарт Плюс': 577,
  'Беговел детский Maxiscoo Comet 12"': 578,
  'Беговел детский Maxiscoo Rocket 12"': 579,
  'Беговел детский McLaren Premium 12"': 580,
  'Беговел детский Stern Kidster Magnesium 12", 2021': 581,
  'Беговел детский Stern Kidster Magnesium 12", 2022': 582,
  'Беговые лыжи Atomic Mover Skintec - med': 583,
  'Беговые лыжи Atomic PRO S2': 584,
  'Беговые лыжи Atomic Pro S1 Rus': 585,
  'Беговые лыжи Atomic REDSTER C7 SKINTEC xhard PSP': 586,
  'Беговые лыжи Atomic REDSTER S7 hard': 587,
  'Беговые лыжи Atomic REDSTER S9 CARBON - UNI hard KG': 588,
  'Беговые лыжи Atomic Redster C9 Carbon - Cold Soft': 589,
  'Беговые лыжи Atomic Redster C9 Carbon - Plus': 590,
  'Беговые лыжи Atomic Redster C9 Carbon - Uni Soft R': 591,
  'Беговые лыжи Atomic Redster S5': 592,
  'Беговые лыжи Atomic Redster S9 Gen S - Med SI': 593,
  'Беговые лыжи Atomic Redster S9 Med Si': 594,
  'Беговые лыжи Fischer AEROLITE SKATE 60 IFP Turnamic': 595,
  'Беговые лыжи Fischer AEROLITE SKATE RUSSIALOPPET IFP Turnamic': 596,
  'Беговые лыжи Fischer Aerolite 60 Combi IFP': 597,
  'Беговые лыжи Fischer Aerolite Skate 70 Medium IFP': 598,
  'Беговые лыжи Fischer Aerolite Skate 70 Stiff IFP': 599,
  'Беговые лыжи Fischer CARBONLITE SKATE COLD STIFF IFP': 600,
  'Беговые лыжи Fischer CARBONLITE SKATE PLUS MEDIUM IFP': 601,
  'Беговые лыжи Fischer Carbonlite Skate': 602,
  'Беговые лыжи Fischer Carbonlite Skate Plus Stiff Hole Turnamic': 603,
  'Беговые лыжи Fischer Excursion 88 Crown/Skin': 604,
  'Беговые лыжи Fischer Helium Skate': 605,
  'Беговые лыжи Fischer Helium Skate Plus Stiff Hole IFP': 606,
  'Беговые лыжи Fischer LS SKATE XTRA STIFF': 607,
  'Беговые лыжи Fischer Nordic Crown': 608,
  'Беговые лыжи Fischer RCS Classic': 609,
  'Беговые лыжи Fischer RCS Classic Plus Stiff IFP': 610,
  'Беговые лыжи Fischer RCS Skate': 611,
  'Беговые лыжи Fischer RCS Skate Cold Stiff IFP': 612,
  'Беговые лыжи Fischer RCS Skate Plus Med Hole IFP': 613,
  'Беговые лыжи Fischer RCS Skate Plus Stiff Hole IFP': 614,
  'Беговые лыжи Fischer RCS Skate Plus Stiff Hole Turnamic': 615,
  'Беговые лыжи Fischer SC Combi IFP': 616,
  'Беговые лыжи Fischer SC SKATE IFP': 617,
  'Беговые лыжи Fischer SCS Skate IFP': 618,
  'Беговые лыжи Fischer SPEEDMAX 3D CL 812 MED IFP': 619,
  'Беговые лыжи Fischer Speedmax 3D Classic': 620,
  'Беговые лыжи Fischer Speedmax 3D Classic 902 Plus Med Turnamic': 621,
  'Беговые лыжи Fischer Speedmax 3D Skate': 622,
  'Беговые лыжи Fischer Speedmax 3D Skate Plus Med Hole IFP': 623,
  'Беговые лыжи Fischer Speedmax SK C-Special Hole IFP': 624,
  'Беговые лыжи Fischer Speedmax Skate 3D 61K': 625,
  'Беговые лыжи Fischer Spider 62': 626,
  'Беговые лыжи Fischer Spider 62 Crown': 627,
  'Беговые лыжи Fischer Summit Crown': 628,
  'Беговые лыжи Fischer Superlight Crown NIS': 629,
  'Беговые лыжи Fischer Twin Skin Carbon Pro Stiff IFP': 630,
  'Беговые лыжи Fischer Twin Skin Sport': 631,
  'Беговые лыжи Madshus Active Skate': 632,
  'Беговые лыжи Madshus Active Skin': 633,
  'Беговые лыжи Madshus Activesonic Combi': 634,
  'Беговые лыжи Madshus CT90': 635,
  'Беговые лыжи Madshus Endurace Skate': 636,
  'Беговые лыжи Madshus Endurace Skin': 637,
  'Беговые лыжи Madshus Fjelltech M44 Skin': 638,
  'Беговые лыжи Madshus INTRASONIC COMBI': 639,
  'Беговые лыжи Madshus INTRASONIC SKATE': 640,
  'Беговые лыжи Madshus Nordseter Combi': 641,
  'Беговые лыжи Madshus Nordseter Skate': 642,
  'Беговые лыжи Madshus REDLINE 3.0 F2': 643,
  'Беговые лыжи Madshus REDLINE 3.0 F3': 644,
  'Беговые лыжи Madshus REDline 2.0 Skate Regular': 645,
  'Беговые лыжи Madshus Race Pro Skate': 646,
  'Беговые лыжи Madshus Race Pro Skin': 647,
  'Беговые лыжи Madshus Redline 2.0 Classic Plus': 648,
  'Беговые лыжи Madshus Terrasonic Intelligrip': 649,
  'Беговые лыжи Madshus Ultrasonic Intelligrip': 650,
  'Беговые лыжи Nordway Classic': 651,
  'Беговые лыжи Nordway Combi': 652,
  'Беговые лыжи Nordway RS Combi': 653,
  'Беговые лыжи Nordway RS Skate': 654,
  'Беговые лыжи Nordway Skin': 655,
  'Беговые лыжи Nordway XC Classic': 656,
  'Беговые лыжи Nordway XC Combi': 657,
  'Беговые лыжи Nordway XC Tour': 658,
  'Беговые лыжи Race Pro Classic': 659,
  'Беговые лыжи Race Pro Intelligrip': 660,
  'Беговые лыжи Salomon Escape 6 Grip': 661,
  'Беговые лыжи Salomon R 6 Combi': 662,
  'Беговые лыжи Salomon RC10 eSKIN Hard+ PSP': 663,
  'Беговые лыжи Salomon RS 7': 664,
  'Беговые лыжи Salomon RS 8': 665,
  'Беговые лыжи Salomon Rc10 Eskin Med+ PSP': 666,
  'Беговые лыжи Salomon S/LAB CARBON SKATE BLUE': 667,
  'Беговые лыжи Salomon S/LAB CARBON SKATE X-Stiff': 668,
  'Беговые лыжи Salomon S/Lab Carbon Classic Hard': 669,
  'Беговые лыжи Salomon S/Lab Carbon Classic Med': 670,
  'Беговые лыжи Salomon S/Lab Carbon Classic Soft': 671,
  'Беговые лыжи Salomon S/Lab Carbon Skate': 672,
  'Беговые лыжи Salomon S/Max Carbon': 673,
  'Беговые лыжи Salomon S/Max Carbon X-stiff': 674,
  'Беговые лыжи Salomon S/Race Carbon': 675,
  'Беговые лыжи Salomon Snowscape 7': 676,
  'Беговые лыжи детские Atomic Pro C1 Grip': 677,
  'Беговые лыжи детские Fischer Carbonlite SK Hole Jr Turnamic': 678,
  'Беговые лыжи детские Fischer Carbonlite Skate IFP': 679,
  'Беговые лыжи детские Fischer RCS Skate JR IFP': 680,
  'Беговые лыжи детские Fischer Speedmax 3D SK Hole Jr Turnamic': 681,
  'Беговые лыжи детские Fischer Sprint Crown': 682,
  'Беговые лыжи детские Madshus Active Skin': 683,
  'Беговые лыжи детские Madshus CT90': 684,
  'Беговые лыжи детские Madshus Redline Carbon Classic Jr': 685,
  'Беговые лыжи детские Madshus Redline Skate': 686,
  'Беговые лыжи детские Nordway Combi': 687,
  'Беговые лыжи детские Nordway RS Combi': 688,
  'Беговые лыжи детские Nordway RS Skate': 689,
  'Беговые лыжи детские Salomon S/Max Eskin + PSP': 690,
  'Беговые лыжи женские Madshus Amica 80/90': 691,
  'Беговые лыжи женские Madshus Amica 90': 692,
  'Беговые лыжи женские Nordway Bliss': 693,
  'Беговые лыжи женские Nordway XC Bliss': 694,
  'Безмен Rapala RCD': 695,
  'Бейсболк New Era Neon Rubber Logo': 696,
  'Бейсболка 361°': 697,
  'Бейсболка ASICS': 698,
  'Бейсболка ASICS Cotton': 699,
  "Бейсболка Arc'teryx A-Pop Trucker": 700,
  "Бейсболка Arc'teryx Bird": 701,
  'Бейсболка Babolat Basic Logo': 702,
  'Бейсболка CEP': 703,
  'Бейсболка Columbia Baxter Falls Dad Cap': 704,
  'Бейсболка Columbia Buckhollow Waterproof Cap': 705,
  'Бейсболка Columbia CSC II Fleece Ball Cap': 706,
  'Бейсболка Columbia CSC™ II Fleece Ball Cap': 707,
  'Бейсболка Columbia Calderwood': 708,
  'Бейсболка Columbia Coolhead Cachalot': 709,
  'Бейсболка Columbia Coolhead Ice Cachalot': 710,
  'Бейсболка Columbia Escape Thrive Cap': 711,
  'Бейсболка Columbia Maxtrail 110 Snap Back': 712,
  'Бейсболка Columbia Mesh': 713,
  'Бейсболка Columbia Mesh Ballcap': 714,
  'Бейсболка Columbia Mesh Snap Back - High': 715,
  'Бейсболка Columbia Mount Blackmore Hat': 716,
  'Бейсболка Columbia PFG Mesh Snap Back': 717,
  'Бейсболка Columbia ROC II Ball Cap': 718,
  'Бейсболка Columbia Schooner Bank Cachalot III': 719,
  'Бейсболка Columbia Silver Ridge III Ball Cap': 720,
  'Бейсболка Columbia Tech Shade II Ball Cap': 721,
  'Бейсболка Columbia Tech Trail 110 Snap Back': 722,
  'Бейсболка Columbia Trail Essential Snap Back': 723,
  'Бейсболка Craft Distance': 724,
  'Бейсболка DC Shoes Omni Logo Decad': 725,
  'Бейсболка Demix': 726,
  'Бейсболка Ellesse': 727,
  'Бейсболка Ellesse Ragusa': 728,
  'Бейсболка Erke': 729,
  'Бейсболка Everlast 1910': 730,
  'Бейсболка Everlast 1910 Mesh': 731,
  'Бейсболка FILA': 732,
  'Бейсболка IcePeak Hadley': 733,
  'Бейсболка IcePeak Haleburg': 734,
  'Бейсболка IcePeak Haliimaile': 735,
  'Бейсболка IcePeak Hallenberg': 736,
  'Бейсболка IcePeak Hamer': 737,
  'Бейсболка IcePeak Harrisonburg': 738,
  'Бейсболка IcePeak Hills': 739,
  'Бейсболка Jack Wolfskin': 740,
  'Бейсболка KRAKATAU': 741,
  'Бейсболка Kappa': 742,
  'Бейсболка Kappa Bapov': 743,
  'Бейсболка Krakatau': 744,
  'Бейсболка Li-Ning': 745,
  'Бейсболка Li-ning': 746,
  'Бейсболка Luhta Aage': 747,
  'Бейсболка Luhta Nuupala': 748,
  'Бейсболка Marmot Retro': 749,
  'Бейсболка Merrell': 750,
  'Бейсболка Mountain Hardwear MHW Logo Trucker': 751,
  'Бейсболка Mountain Hardwear Stryder Trek Hat': 752,
  'Бейсболка New Era 115 Ne Entry Patch Camo 940': 753,
  'Бейсболка New Era 39Thirty MLB New York Yankees': 754,
  'Бейсболка New Era 9Forty': 755,
  'Бейсболка New Era 9Forty Bear': 756,
  'Бейсболка New Era 9Forty Diamond Era': 757,
  'Бейсболка New Era 9Forty Entry Ess': 758,
  'Бейсболка New Era 9Forty Entry Patch': 759,
  'Бейсболка New Era 9Forty Entry Patch Camo': 760,
  'Бейсболка New Era 9Forty Logo': 761,
  'Бейсболка New Era 9Forty Looney Tunes': 762,
  'Бейсболка New Era 9Forty MLB Los Angeles Dodgers': 763,
  'Бейсболка New Era 9Forty MLB New York Yankees': 764,
  'Бейсболка New Era 9Forty NBA Chicago Bulls': 765,
  'Бейсболка New Era 9Forty NBA Los Angeles Lakers': 766,
  'Бейсболка New Era 9Forty Neyyan': 767,
  'Бейсболка New Era Clean Trucker': 768,
  'Бейсболка New Era Contemporary 940 Trucker': 769,
  'Бейсболка New Era Core 940 Trucker Losdod': 770,
  'Бейсболка New Era League Essential 39Thirty': 771,
  'Бейсболка New Era League Essential 9Fifty': 772,
  'Бейсболка New Era League Essential 9Forty': 773,
  'Бейсболка New Era Looney Tunes': 774,
  'Бейсболка New Era MLB Flawless Logo Basic 940 Neyyan': 775,
  'Бейсболка New Era NBA Chicago Bulls': 776,
  'Бейсболка New Era NYC': 777,
  'Бейсболка New Era NYC 9Forty': 778,
  'Бейсболка New Era Trucker MLB NY Yankees': 779,
  'Бейсболка Nike': 780,
  'Бейсболка Nike AeroBill Legacy91': 781,
  'Бейсболка Nike Dri-FIT Aerobill Featherlight': 782,
  'Бейсболка Nike Jordan Air': 783,
  'Бейсболка Nike Jordan Pro': 784,
  'Бейсболка Nike Jordan Pro Jumpman': 785,
  'Бейсболка Nike Sportswear Heritage 86': 786,
  'Бейсболка Northland': 787,
  'Бейсболка Outventure': 788,
  'Бейсболка PUMA': 789,
  'Бейсболка PUMA ESS Cat Logo': 790,
  'Бейсболка PUMA Ess': 791,
  'Бейсболка PUMA Hometown Heroes': 792,
  'Бейсболка PUMA Metal Cat': 793,
  'Бейсболка PUMA Poly Cot': 794,
  'Бейсболка PUMA Running Cap III': 795,
  'Бейсболка PUMA темно': 796,
  'Бейсболка Peak Performance Tour': 797,
  'Бейсболка Protest': 798,
  'Бейсболка Puma Full Reflective Running': 799,
  'Бейсболка Quiksilver Days': 800,
  'Бейсболка Quiksilver Grounder': 801,
  'Бейсболка Quiksilver Grounder серый': 802,
  'Бейсболка Quiksilver Reek Easy': 803,
  'Бейсболка Reebok': 804,
  'Бейсболка Reebok Active Foundation Badge': 805,
  'Бейсболка Reebok Classics Vector': 806,
  'Бейсболка Reebok Float Run Performance': 807,
  'Бейсболка Reebok United By Fitness': 808,
  'Бейсболка Salomon': 809,
  'Бейсболка Salomon Air Logo Cap-Golden Trail': 810,
  'Бейсболка Salomon Bonatti Five Cap': 811,
  'Бейсболка Salomon Logo': 812,
  'Бейсболка Salomon Logo Flexfit': 813,
  'Бейсболка Salomon Outlife Sweet Fleece': 814,
  'Бейсболка Salomon Reflective Cap': 815,
  'Бейсболка Salomon Trucker Flat': 816,
  'Бейсболка Salomon XA': 817,
  'Бейсболка Salomon Xа Compact Cap': 818,
  'Бейсболка Termit': 819,
  'Бейсболка The North Face 66 Classic': 820,
  'Бейсболка The North Face Deep Fit Mudder Trucker': 821,
  'Бейсболка The North Face Horizon': 822,
  'Бейсболка The North Face Recycled 66 Classic': 823,
  'Бейсболка Vans Court Side Hat': 824,
  'Бейсболка Vans Packed': 825,
  'Бейсболка Vans Skate': 826,
  'Бейсболка Vans Skate Classics': 827,
  'Бейсболка Volkl': 828,
  'Бейсболка Wilson': 829,
  'Бейсболка Wilson Since 1914': 830,
  'Бейсболка Wilson Summer': 831,
  'Бейсболка Wilson Ultralight Tennis': 832,
  'Бейсболка Wilson Ultralight Visor': 833,
  'Бейсболка Wilson W-Cap': 834,
  'Бейсболка Wilson W-Visor': 835,
  'Бейсболка adidas': 836,
  'Бейсболка adidas 3 Stripes': 837,
  'Бейсболка adidas 3D Adicolor Cap': 838,
  'Бейсболка adidas Bball Cap Cot': 839,
  'Бейсболка adidas Dad Cap Crinkled Nylon': 840,
  'Бейсболка adidas Daily Cap': 841,
  'Бейсболка adidas Metal Badge': 842,
  'Бейсболка adidas Satin': 843,
  'Бейсболка детская Demix': 844,
  'Бейсболка детская FILA': 845,
  'Бейсболка детская IcePeak Haring': 846,
  'Бейсболка детская Kappa': 847,
  'Бейсболка детская New Era 9Forty': 848,
  'Бейсболка детская New Era Clean 940 Af Trucker Neyyan': 849,
  'Бейсболка детская New Era Kids NY': 850,
  'Бейсболка детская New Era League Essential 9Forty': 851,
  'Бейсболка детская New Era MLB New York Yankees': 852,
  'Бейсболка детская Nike': 853,
  'Бейсболка детская Nike Futura Mash Up': 854,
  'Бейсболка детская Northland': 855,
  'Бейсболка детская Outventure': 856,
  'Бейсболка детская PUMA': 857,
  'Бейсболка детская Under Armour Armourvent Adj': 858,
  'Бейсболка детская Under Armour Blitzing Adj Hat Cap': 859,
  'Бейсболка детская adidas Bos': 860,
  'Бейсболка для девочек Demix': 861,
  'Бейсболка для девочек FILA': 862,
  'Бейсболка для девочек Kappa': 863,
  'Бейсболка для девочек New Era 9Forty': 864,
  'Бейсболка для девочек New Era Kids NY': 865,
  'Бейсболка для девочек Nike': 866,
  'Бейсболка для девочек Northland': 867,
  'Бейсболка для девочек Outventure': 868,
  'Бейсболка для девочек PUMA': 869,
  'Бейсболка для девочек Termit': 870,
  'Бейсболка для девочек adidas Bos': 871,
  'Бейсболка для мальчиков Converse': 872,
  'Бейсболка для мальчиков Demix': 873,
  'Бейсболка для мальчиков FILA': 874,
  'Бейсболка для мальчиков Nike Futura': 875,
  'Бейсболка для мальчиков Northland': 876,
  'Бейсболка для мальчиков Outventure': 877,
  'Бейсболка для мальчиков Termit': 878,
  'Бейсболка для мальчиков adidas модель': 879,
  'Бейсболка женская Demix': 880,
  'Бейсболка женская FILA': 881,
  'Бейсболка женская Luhta': 882,
  'Бейсболка женская Luhta Naarkoski': 883,
  'Бейсболка женская New Era 9Forty': 884,
  'Бейсболка женская New Era NYC 9Forty': 885,
  'Бейсболка женская Northland': 886,
  'Бейсболка женская Outventure': 887,
  'Бейсболка женская PUMA Ess': 888,
  'Бейсболка женская PUMA Metal Cat': 889,
  'Бейсболка женская PUMA Ponytail': 890,
  'Бейсболка женская Peak Performance Retro': 891,
  'Бейсболка женская Reebok Active Foundation Badge': 892,
  'Бейсболка женская Termit': 893,
  'Бейсболка мужская Demix': 894,
  'Бейсболка мужская FILA': 895,
  'Бейсболка мужская Merrell': 896,
  'Бейсболка мужская New Era Borough AF Trucker': 897,
  'Бейсболка мужская New Era New York Yankees': 898,
  'Бейсболка мужская Northland': 899,
  'Бейсболка мужская Outventure': 900,
  'Бейсболка мужская adidas': 901,
  'Бейсболка мужская adidas Snapback Logo': 902,
  'Бейсболки Under Armour Armourvent Adj': 903,
  'Бейсболки Under Armour Blitzing Adj Cap': 904,
  'Бейсболки Under Armour Blitzing Adj Hat Cap': 905,
  'Бейсболки Under Armour Blitzing Adjustable Cap': 906,
  'Бейсбольная бита Torneo': 907,
  'Бейсбольная бита с мячом Torneo': 908,
  'Белая краска-ликвид для белой спортивной обуви и кроссовок Salton Sport, 75мл': 909,
  'Бензиновая горелка Fire-Maple Turbo': 910,
  'Бензиновая горелка Fire-Maple Turbo серебристый': 911,
  'Беруши Joss': 912,
  'Беруши Mad Wave WAXBALL': 913,
  'Беруши Speedo': 914,
  'Беруши Speedo Biofuse Aquatic': 915,
  'Беруши плунжерные Mad Wave Ear plugs': 916,
  'Беруши силиконовые Mad Wave ERGO EAR PLUG': 917,
  'Беспроводной эхолот Deeper Chirp+2 Trophy Bundle': 918,
  'Беспроводной эхолот Deeper Chirp+2.0': 919,
  'Беспроводной эхолот Deeper Pro': 920,
  'Беспроводной эхолот Deeper Pro+': 921,
  'Беспроводной эхолот Deeper Pro+2.0': 922,
  'Беспроводной эхолот Deeper Start': 923,
  'Беспроводные Bluetooth наушники Interstep SBH-520': 924,
  'Бесшовный спортивный топ-бра со вставными чашками Eazyway': 925,
  'Бикини для девочек FILA': 926,
  'Бикини для девочек Joss': 927,
  'Бикини для девочек Protest': 928,
  'Бикини для девочек Roxy Flowers': 929,
  'Бикини для девочек Roxy Heaven': 930,
  'Бикини для девочек Roxy Just Athletic': 931,
  'Бикини для девочек Roxy Malibu Story': 932,
  'Бикини для девочек Termit': 933,
  'Бикини женские Protest Prtfrontera Bikini': 934,
  'Бикини женское Protest Idaho': 935,
  'Бинокль Outventure': 936,
  'Бинокль Outventure, 2021': 937,
  'Бинт Demix, 2,5 м, 2 шт.': 938,
  'Бинт Demix, 3,5 м, 2 шт': 939,
  'Бинт Demix, 3,5 м, 2 шт.': 940,
  'Бинт Demix, 4,5 м, 2 шт.': 941,
  'Бинт Everlast 3 м': 942,
  'Бинт Everlast Spark 3 м, 2 шт.': 943,
  'Бинт Everlast, 2,54 м, 2 шт.': 944,
  'Бинт Everlast, 2,75 м, 2 шт.': 945,
  'Бинт Everlast, 3 м, 2 шт.': 946,
  'Бинт Everlast, 4,55 м, 2 шт.': 947,
  'Бинт Green Hill, 2,5 м, 2 шт.': 948,
  'Бинт голеностопа Demix': 949,
  'Бинт для голеностопа LP 634': 950,
  'Бинт для запястья LP 633': 951,
  'Бинт для колена LP 631': 952,
  'Бинт для локтя LP 632': 953,
  'Бинт запястья Demix': 954,
  'Бинт колена Demix': 955,
  'Бинт локтя Demix': 956,
  'Бинты Everlast 2,5 м, 2 шт.': 957,
  'Бинты Everlast 3,5 м, 2 шт.': 958,
  'Бинты Everlast 3.5 м, 2 шт.': 959,
  'Бинты Everlast 4.55 м, 2 шт.': 960,
  'Бинты adidas, 3,5 м, 2 шт.': 961,
  'Бинты adidas, 4,5 м, 2 шт.': 962,
  'Бинты боксерские Demix 2,5 м, 2 шт.': 963,
  'Бинты боксерские Demix 3,5 м, 2 шт.': 964,
  'Бинты боксерские Demix 4,5 м, 2 шт.': 965,
  'Бинты боксерские эластичные Demix 2,5 м, 2 шт': 966,
  'Бинты боксерские эластичные Demix 3,5 м, 2 шт': 967,
  'Бинты боксерские эластичные Demix 4,5 м, 2 шт': 968,
  'Бинты для фиксации запястий Torneo': 969,
  'Блесна Rapala Harmaja 18/CRHD/8,5см, 18гр': 970,
  'Блесна Rapala Harmaja 18/MXM/8,5см, 18гр': 971,
  'Блесна Rapala Kallan 26/HNL/11см, 26гр': 972,
  'Блесна Rapala Kallan 26/HT/11см, 26гр': 973,
  'Блесна Rapala Nauvo 19/RTG/6,6см, 19гр': 974,
  'Блесна вращающаяся Akara Action Series Aglia Tandem 1/3 8 гр. 2/7 oz. A 7': 975,
  'Блесна вращающаяся Akara Action Series Aglia Tandem 1/3 8 гр. 2/7 oz. A 8': 976,
  'Блесна вращающаяся Akara Action Series Aglia Tandem 1/3 8 гр. 2/7 oz. A34': 977,
  'Блесна вращающаяся Akara Action Series Aglia Tandem 2/4 11 гр. 2/5 oz. A 7': 978,
  'Блесна вращающаяся Akara Action Series Aglia Tandem 2/4 11 гр. 2/5 oz. A01': 979,
  'Блесна вращающаяся Akara Action Series Aglia Tandem 2/4 11 гр. 2/5 oz. A04': 980,
  'Блесна вращающаяся Akara Action Series Antey 4 9,5 гр. 1/3 oz. A32': 981,
  'Блесна вращающаяся Akara Action Series Bell 2 6 гр. 1/5 oz. A20': 982,
  'Блесна вращающаяся Akara Action Series Bell 2 6 гр. 1/5 oz. A7': 983,
  'Блесна вращающаяся Akara Action Series Bell 3 8 гр. 2/7 oz. A19': 984,
  'Блесна вращающаяся Akara Action Series Libra 2 8 гр. 2/7 oz. A19-2': 985,
  'Блесна вращающаяся Akara Action Series Libra 2 8 гр. 2/7 oz. A20-4': 986,
  'Блесна вращающаяся Akara Action Series Libra 2 8 гр. 2/7 oz. A21-1': 987,
  'Блесна вращающаяся Akara Action Series Libra 2 8 гр. 2/7 oz. A21-2': 988,
  'Блесна вращающаяся Akara Action Series Libra 2 8 гр. 2/7 oz. A3-1': 989,
  'Блесна вращающаяся Akara Action Series Libra 3 11 гр. 2/5 oz. A21-1': 990,
  'Блесна вращающаяся Akara Action Series Libra 4 16 гр. 4/7 oz. A19-3': 991,
  'Блесна вращающаяся Akara Action Series Libra 4 16 гр. 4/7 oz. A20-1': 992,
  'Блесна вращающаяся Akara Action Series Libra 4 16 гр. 4/7 oz. A20-4': 993,
  'Блесна вращающаяся Akara Action Series Long 3 12 гр. 3/7 oz. A34': 994,
  'Блесна вращающаяся Akara Action Series Tandem Bomba 2/4 21 гр. 5/7 oz. A10': 995,
  'Блесна вращающаяся Akara Lite Series Coin 1 3,0 гр. 1/9 oz. A01': 996,
  'Блесна вращающаяся Akara Lite Series Coin 1 3,0 гр. 1/9 oz. A02': 997,
  'Блесна вращающаяся Akara Lite Series Coin 1 3,0 гр. 1/9 oz. A17': 998,
  'Блесна вращающаяся Akara Lite Series Coin 1 3,0 гр. 1/9 oz. A18': 999,
  ...},
 'colour': {'бежевый': 0,
  'белый': 1,
  'белый/розовый': 2,
  'белый/серый': 3,
  'белый/черный': 4,
  'бирюзовый': 5,
  'болотный': 6,
  'голубой': 7,
  'графитовый': 8,
  'другой': 9,
  'желтый': 10,
  'зеленый': 11,
  'коричневый': 12,
  'красный': 13,
  'красный/белый': 14,
  'кремовый': 15,
  'лавандовый': 16,
  'милитари': 17,
  'морской': 18,
  'мультицвет': 19,
  'оливковый': 20,
  'оранжевый': 21,
  'персиковый': 22,
  'песочный': 23,
  'пионовый': 24,
  'розовый': 25,
  'салатовый': 26,
  'сапфировый': 27,
  'светло-бежевый': 28,
  'светло-серый': 29,
  'серебряный': 30,
  'серый': 31,
  'серый/белый': 32,
  'серый/черный': 33,
  'синий': 34,
  'синий/белый': 35,
  'синий/красный': 36,
  'темно-зеленый': 37,
  'темно-коричневый': 38,
  'темно-серый': 39,
  'темно-синий': 40,
  'фиолетовый': 41,
  'хаки': 42,
  'черный': 43,
  'черный/белый': 44,
  'черный/желтый': 45,
  'черный/зеленый': 46,
  'черный/красный': 47,
  'черный/серый': 48,
  'черный/синий': 49},
 'education': {'высшее': 0, 'среднее': 1},
 'product_group': {'8 батареек gp ': 0,
  'apple watch series': 1,
  'basketball ball wilson': 2,
  'bcaa   апельсин': 3,
  'bcaa   лимон': 4,
  'bike computer stern': 5,
  'cамокат nitro circus': 6,
  'cдвоенный массажный мяч': 7,
  'cмазка силиконовая для': 8,
  'cноуборд salomon sickstick': 9,
  'cуппорт колена lp': 10,
  'demix fitness gloves': 11,
  'demix 袜子,3 双黑色': 12,
  'fila socks  3': 13,
  'fila 蓝色男士泳裤': 14,
  'futsal ball mikasa': 15,
  'giày nam demix': 16,
  'giày thể thao': 17,
  'gladiator big sup': 18,
  'gladiator duo 15.2': 19,
  'gladiator elite 11.2': 20,
  'gladiator elite 11.6': 21,
  'gladiator elite 12.6lt': 22,
  'gladiator elite 12.6s': 23,
  'gladiator elite 14.0s': 24,
  'gladiator elite kd': 25,
  'gladiator origin 10.6sc': 26,
  'gladiator origin 12.6s': 27,
  'gladiator origin 12.6t': 28,
  'gladiator pro 11.2': 29,
  'gladiator pro 11.4': 30,
  'gladiator pro 12.6t': 31,
  'gladiator wind 10.7': 32,
  'gladiator wind 11.6': 33,
  'joss joy 深蓝色拖鞋': 34,
  'kлюшка ccm jetspeed': 35,
  'kлюшка ccm ribcor': 36,
  'kлюшка ccm super': 37,
  'kлюшка ccm supertacks': 38,
  'kлюшка madguy ghost ': 39,
  'kлюшка детская ccm': 40,
  'l-carnitine vplab nutrition ': 41,
  'low shoes for': 42,
  'maxler marine collagen': 43,
  'maxler vitawomen витамины': 44,
  "men's windbreaker outventure": 45,
  'nike value cotton': 46,
  'puma 4keeps sports': 47,
  'quần tây nam': 48,
  'set for table': 49,
  'sis powder beta': 50,
  'sneakers for women': 51,
  'socks puma outlets ': 52,
  'sports bra top': 53,
  'sup easy rider': 54,
  'sup hiken water': 55,
  'sup prime 10\'5*34"*6"': 56,
  'sup prime 9\'*30"*4"': 57,
  'sup prime rental': 58,
  'sup terror 10\'6*33"*6"': 59,
  'sup terror 11\'*32"*6"': 60,
  'sup terror 12\'6"29"6"': 61,
  'sup terror 14\'28"6"': 62,
  'sup надувной adventum': 63,
  'sup надувной aqua': 64,
  'sup надувной aztron': 65,
  'sup надувной bestway': 66,
  'sup надувной gladiator': 67,
  'sup надувной greenhouse ': 68,
  'sup надувной hiper': 69,
  'sup надувной jobe': 70,
  'sup надувной детский': 71,
  'sup надувной\xa0bestway aqua': 72,
  'sup надувной\xa0bestway breeze': 73,
  'sup надувной\xa0bestway freesoul': 74,
  "sup надувной\xa0bestway huaka'i": 75,
  'sup надувной\xa0bestway kahawai': 76,
  'sup надувной\xa0bestway oceana': 77,
  'sup надувной\xa0bestway sea': 78,
  'sup надувной\xa0beyond marina': 79,
  'sup надувной\xa0gq board': 80,
  'sup надувной\xa0js board': 81,
  'sup надувной\xa0koetsu mint': 82,
  't-shirt for boys': 83,
  't-shirt for men': 84,
  'termit hawaii 蓝色/米色男士拖鞋': 85,
  'trousers for boys': 86,
  "women's beach jumpsuit": 87,
  "women's t-shirt outventure": 88,
  'адаптер для багажника': 89,
  'адаптер под флягодержатель': 90,
  'адаптер под цанговый': 91,
  'адаптеры outventure': 92,
  'аквагрим для болельщиков': 93,
  'аквагримм карандаш для': 94,
  'аккумулятор li-ion fenix': 95,
  'аккумулятор переносной outventure': 96,
  'аккумулятор холода nordway': 97,
  'аккумулятор холода outventure': 98,
  'аккумулятор холода outventure ': 99,
  'активная пена для': 100,
  'альфа-липоевая кислота mychoice': 101,
  'аминокислота / глютамин': 102,
  'аминокислота 5-htp и': 103,
  'аминокислота maxler arginine': 104,
  'аминокислота rline бцаа': 105,
  'аминокислота бета-аланин vplab': 106,
  'аминокислота л-аргинин  vplab': 107,
  'аминокислота л-глутамин  vplab': 108,
  'аминокислоты / bcaa': 109,
  'аминокислоты maxler 100%': 110,
  'аминокислоты vplab bcaa': 111,
  'аминокислоты vplab nutrition ': 112,
  'анорак двусторонний мужской': 113,
  'анорак для девочек': 114,
  'анорак для мальчиков': 115,
  'анорак женский 686': 116,
  "анорак женский arc'teryx": 117,
  'анорак женский dc': 118,
  'анорак женский icepeak': 119,
  'анорак женский mountain': 120,
  'анорак женский peak': 121,
  'анорак женский protest': 122,
  'анорак женский termit': 123,
  'анорак женский under': 124,
  'анорак женский vans': 125,
  'анорак мужской 686': 126,
  'анорак мужской burton': 127,
  'анорак мужской columbia': 128,
  'анорак мужской dc': 129,
  'анорак мужской ellesse': 130,
  'анорак мужской fjallraven': 131,
  'анорак мужской icepeak': 132,
  'анорак мужской kappa': 133,
  'анорак мужской merrell': 134,
  'анорак мужской northland': 135,
  'анорак мужской peak': 136,
  'анорак мужской protest': 137,
  'анорак мужской salomon': 138,
  'анорак мужской termit': 139,
  'анорак мужской the': 140,
  'анорак мужской under': 141,
  'антибактериальные салфетки reloa': 142,
  'антифог joss': 143,
  'антифог для визора': 144,
  'аптечка tatonka first': 145,
  'аэрозоль "защита территории"': 146,
  'аэрозоль детский gardex ': 147,
  'аэрозоль от всех': 148,
  'аэрозоль от клещей': 149,
  'аэрозоль от комаров': 150,
  'аэрозоль от летающих': 151,
  'аэрозоль-репеллент gardex  150': 152,
  'аэрозоль-репеллент от комаров': 153,
  'багажник stern': 154,
  'багажник stern 20"': 155,
  'багажник stern 26"': 156,
  'багажник stern ccar-1n': 157,
  'багажник stern ccar-2': 158,
  'багажник stern ccar-2n': 159,
  'багажник stern ccar-3': 160,
  'багажник topeak': 161,
  'багажник на велосипед': 162,
  'базовая намотка babolat': 163,
  'базовая намотка wilson': 164,
  'базовый клистер спрей': 165,
  'байдарка вольный ветер': 166,
  'байдарка кн "шуя-1"': 167,
  'байдарка кн "шуя-3"': 168,
  'байдарка тритон вектор-2': 169,
  'байдарка тритон вуокса': 170,
  'байдарка тритон легор': 171,
  'байдарка тритон нева-2': 172,
  'байдарка тритон нева-3': 173,
  'байдарка тритон шуя-1': 174,
  'байдарка тритон шуя-2': 175,
  'байдарка тритон шуя-3': 176,
  'бакл для строп': 177,
  'бакля под гребенку': 178,
  'бактерицидный лейкопластырь teneris': 179,
  'балаклава airhole 3+1': 180,
  'балаклава airhole airhood': 181,
  'балаклава airhole airtube': 182,
  'балаклава airhole balaclava': 183,
  'балаклава airhole facemask': 184,
  'балаклава airhole full': 185,
  'балаклава airhole hinge': 186,
  'балаклава airhole standard': 187,
  'балаклава aucrux wind': 188,
  'балаклава columbia titanium': 189,
  'балаклава demix': 190,
  'балаклава glissade': 191,
  'балаклава salomon': 192,
  'балаклава termit': 193,
  'балаклава wind pro': 194,
  'балаклава ziener': 195,
  'балаклава детская airhole': 196,
  'балаклава детская glissade': 197,
  'балаклава детская termit': 198,
  'баланс борд "pro': 199,
  'баланс борд evolutionone': 200,
  'баланс борд indspace': 201,
  'балансировочная платформа jobstick': 202,
  'балансировочная платформа kettler': 203,
  'балансировочная полусфера demix': 204,
  'балансировочный диск demix': 205,
  'балетки для девочек': 206,
  'балетки женские demix': 207,
  'баллон газовый fire-maple': 208,
  'баллон газовый зимний': 209,
  'баллон газовый следопыт': 210,
  'бандаж everlast 1910': 211,
  'бандана': 212,
  'бандана airhole standard': 213,
  'бандана aucrux 1.0bnd': 214,
  'бандана aucrux 1.1bnd': 215,
  'бандана aucrux 1.2bnd': 216,
  'бандана aucrux 1.3bnd': 217,
  'бандана aucrux 1.4bnd': 218,
  'бандана aucrux 1.5bnd': 219,
  'бандана aucrux 1.6bnd': 220,
  'бандана aucrux 1.7bnd': 221,
  'бандана aucrux 1.8bnd': 222,
  'бандана детская outventure': 223,
  'бандана для девочек': 224,
  'банка для хранения': 225,
  'барабан shimano для': 226,
  'барьер тренировочный demix': 227,
  'барьер тренировочный demix ': 228,
  'барьер тренировочный sklz': 229,
  'баскетбольный мяч all': 230,
  'бассеин intex': 231,
  'бассейн bestway': 232,
  'бассейн bestway 170': 233,
  'бассейн intex': 234,
  'бассейн intex 188': 235,
  'бассейн intex easy': 236,
  'батарейки литиевые duracell': 237,
  'батарейки литиевые gp': 238,
  'батарейки щелочные duracell': 239,
  'батарейки щелочные gp': 240,
  'батончик протеиновый forsio': 241,
  'батончик протеиновый powers': 242,
  'батончик протеиновый низкокалорийный': 243,
  'батончик с l-карнитином': 244,
  'батончики snaq fabriq': 245,
  'батончики в шоколаде': 246,
  'батончики кето "bombbar"': 247,
  'батончики кето bombbar': 248,
  'батончики протеиновые forsio': 249,
  'батут kettler wallaroo-10ft': 250,
  'батут kettler wallaroo-12ft': 251,
  'батут kettler wallaroo-8ft': 252,
  'батут startline fitness': 253,
  'батут torneo  102': 254,
  'батут torneo a-903': 255,
  'батут torneo складной': 256,
  'батут с внешней': 257,
  'батут складной torneo': 258,
  'баул the north': 259,
  'баул хоккейный nordway': 260,
  'баул хоккейный ссм': 261,
  'бафф aucrux polartec': 262,
  'бафф aucrux reversible': 263,
  'бафф aucrux standard': 264,
  'бафф polartec 4.2pb': 265,
  'бафф polartec 4.5pb': 266,
  'бафф polartec 6.0pb': 267,
  'бафф polartec 9.3pg': 268,
  'бафф polartec neckwarmer': 269,
  'бафф reversible 1rb': 270,
  'бафф reversible 6.1rb': 271,
  'бафф standard 11.0s': 272,
  'бафф standard 11.3s': 273,
  'бафф standard 15.0s': 274,
  'бафф standard 2s': 275,
  'бафф standard 4.0s': 276,
  'бафф standard 4.2s': 277,
  'бафф standard 9.0s': 278,
  'бафф standard pro4': 279,
  'бафф мужской kappa': 280,
  'беговая дорожка inita': 281,
  'беговая дорожка kettler': 282,
  'беговая дорожка lifespan': 283,
  'беговая дорожка nordictrack': 284,
  'беговая дорожка pro-form': 285,
  'беговая дорожка torneo': 286,
  'беговая дорожка складная': 287,
  'беговая дорожка электрическая': 288,
  'беговел globber go': 289,
  'беговел maxiscoo rocket': 290,
  'беговел stern kidster': 291,
  'беговел детский bentley': 292,
  'беговел детский maxiscoo': 293,
  'беговел детский mclaren': 294,
  'беговел детский stern': 295,
  'беговые лыжи atomic': 296,
  'беговые лыжи fischer': 297,
  'беговые лыжи madshus': 298,
  'беговые лыжи nordway': 299,
  'беговые лыжи race': 300,
  'беговые лыжи salomon': 301,
  'беговые лыжи детские': 302,
  'беговые лыжи женские': 303,
  'безмен rapala rcd': 304,
  'бейсболк new era': 305,
  'бейсболка 361°': 306,
  'бейсболка adidas': 307,
  'бейсболка adidas 3': 308,
  'бейсболка adidas 3d': 309,
  'бейсболка adidas bball': 310,
  'бейсболка adidas dad': 311,
  'бейсболка adidas daily': 312,
  'бейсболка adidas metal': 313,
  'бейсболка adidas satin': 314,
  "бейсболка arc'teryx a-pop": 315,
  "бейсболка arc'teryx bird": 316,
  'бейсболка asics': 317,
  'бейсболка asics cotton': 318,
  'бейсболка babolat basic': 319,
  'бейсболка cep': 320,
  'бейсболка columbia baxter': 321,
  'бейсболка columbia buckhollow': 322,
  'бейсболка columbia calderwood': 323,
  'бейсболка columbia coolhead': 324,
  'бейсболка columbia csc': 325,
  'бейсболка columbia csc™': 326,
  'бейсболка columbia escape': 327,
  'бейсболка columbia maxtrail': 328,
  'бейсболка columbia mesh': 329,
  'бейсболка columbia mount': 330,
  'бейсболка columbia pfg': 331,
  'бейсболка columbia roc': 332,
  'бейсболка columbia schooner': 333,
  'бейсболка columbia silver': 334,
  'бейсболка columbia tech': 335,
  'бейсболка columbia trail': 336,
  'бейсболка craft distance': 337,
  'бейсболка dc shoes': 338,
  'бейсболка demix': 339,
  'бейсболка ellesse': 340,
  'бейсболка ellesse ragusa': 341,
  'бейсболка erke': 342,
  'бейсболка everlast 1910': 343,
  'бейсболка fila': 344,
  'бейсболка icepeak hadley': 345,
  'бейсболка icepeak haleburg': 346,
  'бейсболка icepeak haliimaile': 347,
  'бейсболка icepeak hallenberg': 348,
  'бейсболка icepeak hamer': 349,
  'бейсболка icepeak harrisonburg': 350,
  'бейсболка icepeak hills': 351,
  'бейсболка jack wolfskin': 352,
  'бейсболка kappa': 353,
  'бейсболка kappa bapov': 354,
  'бейсболка krakatau': 355,
  'бейсболка li-ning': 356,
  'бейсболка luhta aage': 357,
  'бейсболка luhta nuupala': 358,
  'бейсболка marmot retro': 359,
  'бейсболка merrell': 360,
  'бейсболка mountain hardwear': 361,
  'бейсболка new era': 362,
  'бейсболка nike': 363,
  'бейсболка nike aerobill': 364,
  'бейсболка nike dri-fit': 365,
  'бейсболка nike jordan': 366,
  'бейсболка nike sportswear': 367,
  'бейсболка northland': 368,
  'бейсболка outventure': 369,
  'бейсболка peak performance': 370,
  'бейсболка protest': 371,
  'бейсболка puma': 372,
  'бейсболка puma ess': 373,
  'бейсболка puma full': 374,
  'бейсболка puma hometown': 375,
  'бейсболка puma metal': 376,
  'бейсболка puma poly': 377,
  'бейсболка puma running': 378,
  'бейсболка puma темно': 379,
  'бейсболка quiksilver days': 380,
  'бейсболка quiksilver grounder': 381,
  'бейсболка quiksilver reek': 382,
  'бейсболка reebok': 383,
  'бейсболка reebok active': 384,
  'бейсболка reebok classics': 385,
  'бейсболка reebok float': 386,
  'бейсболка reebok united': 387,
  'бейсболка salomon': 388,
  'бейсболка salomon air': 389,
  'бейсболка salomon bonatti': 390,
  'бейсболка salomon logo': 391,
  'бейсболка salomon outlife': 392,
  'бейсболка salomon reflective': 393,
  'бейсболка salomon trucker': 394,
  'бейсболка salomon xa': 395,
  'бейсболка salomon xа': 396,
  'бейсболка termit': 397,
  'бейсболка the north': 398,
  'бейсболка vans court': 399,
  'бейсболка vans packed': 400,
  'бейсболка vans skate': 401,
  'бейсболка volkl': 402,
  'бейсболка wilson': 403,
  'бейсболка wilson since': 404,
  'бейсболка wilson summer': 405,
  'бейсболка wilson ultralight': 406,
  'бейсболка wilson w-cap': 407,
  'бейсболка wilson w-visor': 408,
  'бейсболка детская adidas': 409,
  'бейсболка детская demix': 410,
  'бейсболка детская fila': 411,
  'бейсболка детская icepeak': 412,
  'бейсболка детская kappa': 413,
  'бейсболка детская new': 414,
  'бейсболка детская nike': 415,
  'бейсболка детская northland': 416,
  'бейсболка детская outventure': 417,
  'бейсболка детская puma': 418,
  'бейсболка детская under': 419,
  'бейсболка для девочек': 420,
  'бейсболка для мальчиков': 421,
  'бейсболка женская demix': 422,
  'бейсболка женская fila': 423,
  'бейсболка женская luhta': 424,
  'бейсболка женская new': 425,
  'бейсболка женская northland': 426,
  'бейсболка женская outventure': 427,
  'бейсболка женская peak': 428,
  'бейсболка женская puma': 429,
  'бейсболка женская reebok': 430,
  'бейсболка женская termit': 431,
  'бейсболка мужская adidas': 432,
  'бейсболка мужская demix': 433,
  'бейсболка мужская fila': 434,
  'бейсболка мужская merrell': 435,
  'бейсболка мужская new': 436,
  'бейсболка мужская northland': 437,
  'бейсболка мужская outventure': 438,
  'бейсболки under armour': 439,
  'бейсбольная бита torneo': 440,
  'бейсбольная бита с': 441,
  'белая краска-ликвид для': 442,
  'бензиновая горелка fire-maple': 443,
  'беруши joss': 444,
  'беруши mad wave': 445,
  'беруши speedo': 446,
  'беруши speedo biofuse': 447,
  'беруши плунжерные mad': 448,
  'беруши силиконовые mad': 449,
  'беспроводной эхолот deeper': 450,
  'беспроводные bluetooth наушники': 451,
  'бесшовный спортивный топ-бра': 452,
  'бикини для девочек': 453,
  'бикини женские protest': 454,
  'бикини женское protest': 455,
  'бинокль outventure': 456,
  'бинокль outventure  2021': 457,
  'бинт demix  2 5': 458,
  'бинт demix  3 5': 459,
  'бинт demix  4 5': 460,
  'бинт everlast  2 54': 461,
  'бинт everlast  2 75': 462,
  'бинт everlast  3': 463,
  'бинт everlast  4 55': 464,
  'бинт everlast 3': 465,
  'бинт everlast spark': 466,
  'бинт green hill ': 467,
  'бинт голеностопа demix': 468,
  'бинт для голеностопа': 469,
  'бинт для запястья': 470,
  'бинт для колена': 471,
  'бинт для локтя': 472,
  'бинт запястья demix': 473,
  'бинт колена demix': 474,
  'бинт локтя demix': 475,
  'бинты adidas  3 5': 476,
  'бинты adidas  4 5': 477,
  'бинты everlast 2 5': 478,
  'бинты everlast 3 5': 479,
  'бинты everlast 3.5': 480,
  'бинты everlast 4.55': 481,
  'бинты боксерские demix': 482,
  'бинты боксерские эластичные': 483,
  'бинты для фиксации': 484,
  'блесна rapala harmaja': 485,
  'блесна rapala kallan': 486,
  'блесна rapala nauvo': 487,
  'блесна вращающаяся akara': 488,
  'блесна вращающаяся blue': 489,
  'блесна вращающаяся pontoon21': 490,
  'блесна колеблющаяся akara': 491,
  'блесна колеблющаяся pontoon21': 492,
  'блесна колеблющаяся\xa0pontoon21\xa0paco \xa03/8oz': 493,
  'блин torneo стальной': 494,
  'блин torneo стальной ': 495,
  'блин torneo хромированный': 496,
  'блин стальной обрезиненный': 497,
  'блин чугунный обрезиненный': 498,
  'блок для йоги': 499,
  'боди женское vans': 500,
  'бодибар torneo  2': 501,
  'бодибар torneo  3': 502,
  'бодибар torneo  5': 503,
  'бодибар torneo  7': 504,
  'боковые колеса для': 505,
  'боксерки nike machomai': 506,
  'боксерки для мальчиков': 507,
  'боксерки мужские demix': 508,
  'боксерки мужские everlast': 509,
  'боксерки мужские nike': 510,
  'болты для креплений': 511,
  'бомбер для мальчиков': 512,
  'бомбер женский demix': 513,
  'бомбер женский jack': 514,
  'бомбер мужской champion': 515,
  'бомбер мужской demix': 516,
  'бомбер мужской fila': 517,
  'бомбер мужской kappa': 518,
  'бомбер мужской new': 519,
  'бомбер мужской outventure': 520,
  'бомбер мужской termit': 521,
  'бомбер утепленный для': 522,
  "бордшорты мужские o'neill": 523,
  'борцовки green hill': 524,
  'борцовки детские green': 525,
  'борцовки для мальчиков': 526,
  'борцовки мужские asics': 527,
  'борцовки мужские demix': 528,
  'ботинки caterpillar colorado': 529,
  'ботинки caterpillar proxy': 530,
  'ботинки caterpillar raider': 531,
  'ботинки caterpillar scout': 532,
  'ботинки caterpillar trespass': 533,
  'ботинки горнолыжные atomic': 534,
  'ботинки горнолыжные fischer': 535,
  'ботинки горнолыжные head': 536,
  'ботинки горнолыжные salomon': 537,
  'ботинки горнолыжные tecnica': 538,
  'ботинки горнолыжные детские': 539,
  'ботинки горнолыжные женские': 540,
  'ботинки детские caterpillar': 541,
  'ботинки детские outventure': 542,
  'ботинки детские утепленные': 543,
  'ботинки для беговых': 544,
  'ботинки для девочек': 545,
  'ботинки для мальчиков': 546,
  'ботинки женские adidas': 547,
  'ботинки женские caterpillar': 548,
  'ботинки женские columbia': 549,
  'ботинки женские geox': 550,
  'ботинки женские hanwag': 551,
  'ботинки женские head': 552,
  'ботинки женские hoka': 553,
  'ботинки женские merrell': 554,
  'ботинки женские northland': 555,
  'ботинки женские outventure': 556,
  'ботинки женские puma': 557,
  'ботинки женские salomon': 558,
  'ботинки женские scarpa': 559,
  'ботинки женские skechers': 560,
  'ботинки женские tecnica': 561,
  'ботинки лыжные spine': 562,
  'ботинки мужские adidas': 563,
  'ботинки мужские caterpillar': 564,
  'ботинки мужские columbia': 565,
  'ботинки мужские ecco': 566,
  'ботинки мужские geox': 567,
  'ботинки мужские hanwag': 568,
  'ботинки мужские head': 569,
  'ботинки мужские hoka': 570,
  'ботинки мужские icepeak': 571,
  'ботинки мужские merrell': 572,
  'ботинки мужские nike': 573,
  'ботинки мужские northland': 574,
  "ботинки мужские o'neill": 575,
  'ботинки мужские outventure': 576,
  'ботинки мужские puma': 577,
  'ботинки мужские safety': 578,
  'ботинки мужские salomon': 579,
  'ботинки мужские scarpa': 580,
  'ботинки мужские skechers': 581,
  'ботинки мужские tecnica': 582,
  'ботинки мужские the': 583,
  'ботинки мужские утепленные': 584,
  'ботинки неопреновые hiko': 585,
  'ботинки неопреновые joss ': 586,
  'ботинки неопреновые\xa0hiko sport': 587,
  'ботинки сноубордические burton': 588,
  'ботинки сноубордические terror': 589,
  'ботинки утепленные salomon': 590,
  'ботинки утепленные детские': 591,
  'ботинки утепленные для': 592,
  'ботинки утепленные женские': 593,
  'ботинки утепленные мужские': 594,
  'ботинки утеплённые для': 595,
  'бра columbia': 596,
  'бра demix': 597,
  'бра для тренинга\xa0anta': 598,
  'браслет от комаров': 599,
  'браслет светоотражающий cyclotech': 600,
  'браслет туристический outventure': 601,
  'брелок demix': 602,
  'брелок everlast': 603,
  'брелок kliffman акула': 604,
  'брелок kliffman баскетболист': 605,
  'брелок kliffman бегун': 606,
  'брелок kliffman динозавр': 607,
  'брелок kliffman динозавр-стегозавр': 608,
  'брелок kliffman карабин': 609,
  'брелок kliffman ключ': 610,
  'брелок kliffman кодовый': 611,
  'брелок kliffman крокодил': 612,
  'брелок kliffman лыжник': 613,
  'брелок kliffman мультитул': 614,
  'брелок kliffman нож': 615,
  'брелок kliffman пятка': 616,
  'брелок kliffman ракетка': 617,
  'брелок kliffman рыбий': 618,
  'брелок kliffman скейтбордист': 619,
  'брелок kliffman стоппер': 620,
  'брелок kliffman фонарик': 621,
  'брелок kliffman фонарик-лампочка': 622,
  'брелок kliffman хоккеист': 623,
  'брелок outventure': 624,
  'брелок outventure knife': 625,
  'бриджи для девочек': 626,
  'бриджи для мальчиков': 627,
  'бриджи женские asics': 628,
  'бриджи женские brooks': 629,
  'бриджи женские champion': 630,
  'бриджи женские columbia': 631,
  'бриджи женские demix': 632,
  'бриджи женские exxtasy': 633,
  'бриджи женские gsd': 634,
  'бриджи женские nike': 635,
  'бриджи женские salomon': 636,
  'бриджи мужские asics': 637,
  'бриджи мужские columbia': 638,
  'бриджи мужские demix': 639,
  'бриджи мужские outventure': 640,
  'бриджи спортивные для': 641,
  'бронзовая щетка swix': 642,
  'брусья wallbarz parallel': 643,
  'брусья для силового': 644,
  'брусья для силовой': 645,
  'брусья навесные alpinistik': 646,
  'брусья напольные +': 647,
  'брусья настенные kettler': 648,
  'брусья настенные rzr': 649,
  'брусья настенные torneo': 650,
  'брызговик spine classic': 651,
  'брызговики для лыжероллеров': 652,
  'брюки demix': 653,
  'брюки fila': 654,
  'брюки termit': 655,
  'брюки вратарские мужские': 656,
  'брюки детские demix': 657,
  'брюки детские nike': 658,
  'брюки для девочек': 659,
  'брюки для детей': 660,
  'брюки для мальчиков': 661,
  'брюки для сплава': 662,
  'брюки женские 361°': 663,
  'брюки женские adidas': 664,
  'брюки женские anta': 665,
  "брюки женские arc'teryx": 666,
  'брюки женские asics': 667,
  'брюки женские babolat': 668,
  'брюки женские camel': 669,
  'брюки женские champion': 670,
  'брюки женские cmp': 671,
  'брюки женские columbia': 672,
  'брюки женские craft': 673,
  'брюки женские demix': 674,
  'брюки женские ellesse': 675,
  'брюки женские erke': 676,
  'брюки женские fila': 677,
  'брюки женские fjallraven': 678,
  'брюки женские freddy': 679,
  'брюки женские glissade': 680,
  'брюки женские gsd': 681,
  'брюки женские icepeak': 682,
  'брюки женские jack': 683,
  'брюки женские kappa': 684,
  'брюки женские krakatau': 685,
  'брюки женские li-ning': 686,
  'брюки женские loeffler': 687,
  'брюки женские luhta': 688,
  'брюки женские marmot': 689,
  'брюки женские merrell': 690,
  'брюки женские mountain': 691,
  'брюки женские nike': 692,
  'брюки женские northland': 693,
  "брюки женские o'neill": 694,
  'брюки женские odlo': 695,
  'брюки женские outventure': 696,
  'брюки женские peak': 697,
  'брюки женские protest': 698,
  'брюки женские puma': 699,
  'брюки женские reebok': 700,
  'брюки женские regatta': 701,
  'брюки женские salomon': 702,
  'брюки женские skechers': 703,
  'брюки женские sportalm': 704,
  'брюки женские termit': 705,
  'брюки женские the': 706,
  'брюки женские toread': 707,
  'брюки женские under': 708,
  'брюки женские vans': 709,
  'брюки женские volkl': 710,
  'брюки женские ziener': 711,
  'брюки женские для': 712,
  'брюки женские оверсайз': 713,
  'брюки игровые для': 714,
  'брюки игровые мужские': 715,
  'брюки карго мужские': 716,
  'брюки компрессионные madguy': 717,
  'брюки лыжные гоночные': 718,
  'брюки мужские 361°': 719,
  'брюки мужские adidas': 720,
  'брюки мужские anta': 721,
  "брюки мужские arc'teryx": 722,
  'брюки мужские asics': 723,
  'брюки мужские babolat': 724,
  'брюки мужские bask': 725,
  'брюки мужские camel': 726,
  'брюки мужские champion': 727,
  'брюки мужские columbia': 728,
  'брюки мужские craft': 729,
  'брюки мужские dc': 730,
  'брюки мужские demix': 731,
  'брюки мужские element': 732,
  'брюки мужские ellesse': 733,
  'брюки мужские erke': 734,
  'брюки мужские fila': 735,
  'брюки мужские fjallraven': 736,
  'брюки мужские freddy': 737,
  'брюки мужские gsd': 738,
  'брюки мужские icepeak': 739,
  'брюки мужские jack': 740,
  'брюки мужские kailas': 741,
  'брюки мужские kappa': 742,
  'брюки мужские kelme': 743,
  'брюки мужские krakatau': 744,
  'брюки мужские li-ning': 745,
  'брюки мужские luhta': 746,
  'брюки мужские madshus': 747,
  'брюки мужские marmot': 748,
  'брюки мужские merrell': 749,
  'брюки мужские mountain': 750,
  'брюки мужские new': 751,
  'брюки мужские nike': 752,
  'брюки мужские northland': 753,
  "брюки мужские o'neill": 754,
  'брюки мужские odlo': 755,
  'брюки мужские outventure': 756,
  'брюки мужские peak': 757,
  'брюки мужские protest': 758,
  'брюки мужские puma': 759,
  'брюки мужские reebok': 760,
  'брюки мужские regatta': 761,
  'брюки мужские rukka': 762,
  'брюки мужские salomon': 763,
  'брюки мужские saucony': 764,
  'брюки мужские skechers': 765,
  'брюки мужские swix': 766,
  'брюки мужские termit': 767,
  'брюки мужские the': 768,
  'брюки мужские toread': 769,
  'брюки мужские under': 770,
  'брюки мужские vans': 771,
  'брюки мужские volkl': 772,
  'брюки мужские wilson': 773,
  'брюки мужские ziener': 774,
  'брюки мужские для': 775,
  'брюки мужские оверсайз': 776,
  'брюки неопреновые мужские': 777,
  'брюки софтшелл loeffler': 778,
  'брюки софтшелл для': 779,
  'брюки софтшелл женские': 780,
  'брюки софтшелл мужские': 781,
  'брюки спортивные женские': 782,
  'брюки спортивные мужские': 783,
  'брюки унисекс kappa': 784,
  'брюки утепленные детские': 785,
  'брюки утепленные для': 786,
  'брюки утепленные женские': 787,
  'брюки утепленные мужские': 788,
  'брюки флисовые детские': 789,
  'брюки-самосбросы мужские northland': 790,
  'брюки-самосбросы мужские the': 791,
  'брюки-шорты мужские columbia': 792,
  'буксир для санок': 793,
  'буксировочный страховочный лиш': 794,
  'булавы гимнастические demix ': 795,
  'бумеранг torneo': 796,
  'бутсы детские nikejr': 797,
  'бутсы детские puma': 798,
  'бутсы для зала': 799,
  'бутсы для мальчиков': 800,
  'бутсы мужские adidas': 801,
  'бутсы мужские demix': 802,
  'бутсы мужские gsd': 803,
  'бутсы мужские kelme': 804,
  'бутсы мужские new': 805,
  'бутсы мужские nike': 806,
  'бутсы мужские nikevapor': 807,
  'бутсы мужские puma': 808,
  'бутылка camp sfc': 809,
  'бутылка everlast  0 9': 810,
  'бутылка puma seasons': 811,
  'бутылка source act ': 812,
  'бутылка source eco ': 813,
  'бутылка source terrain ': 814,
  'бутылка wilson minions': 815,
  'бутылка для воды': 816,
  'бутылки для воды': 817,
  'бушинги termit  85a': 818,
  'бушинги termit  90a': 819,
  'варежки fischer': 820,
  'варежки kv+ alaska': 821,
  'варежки mountain hardwear': 822,
  'варежки outventure': 823,
  'варежки peak performance': 824,
  'варежки protest': 825,
  'варежки salomon': 826,
  'варежки salomon bonatti': 827,
  'варежки salomon fast': 828,
  'варежки salomon mtn': 829,
  'варежки salomon rs': 830,
  'варежки termit': 831,
  'варежки ziener': 832,
  'варежки ziener gramus': 833,
  'варежки детские demix': 834,
  'варежки детские glissade': 835,
  'варежки детские outventure': 836,
  'варежки детские ziener': 837,
  'вафельные батончики snaq': 838,
  'веганский протеин vplab': 839,
  'велоботинки мужские adidas': 840,
  'велобриджи женские demix': 841,
  'велокомпьютер cat eye': 842,
  'велокомпьютер stern': 843,
  'велокомпьютер stern 5': 844,
  'велокомпьютер stern cbc-5': 845,
  'велокомпьютер беспроводной stern': 846,
  'велокрепление mont blanc': 847,
  'велокресло детское polisport': 848,
  'веломаска uvex athletic': 849,
  'велообувь мужская scott': 850,
  'велопедали stern': 851,
  'велопедали stern  1': 852,
  'велопедали stern cped-c1 ': 853,
  'велосипед bmx haro': 854,
  'велосипед bmx khe': 855,
  'велосипед bmx polygon': 856,
  'велосипед bmx stern': 857,
  'велосипед bmx унисекс': 858,
  'велосипед stark fat': 859,
  'велосипед stark madness': 860,
  'велосипед stark pusher-1': 861,
  "велосипед stark'22 tactic": 862,
  "велосипед stark'23 armer": 863,
  "велосипед stark'23 cobra": 864,
  "велосипед stark'23 funriser": 865,
  "велосипед stark'23 krafter": 866,
  "велосипед stark'23 router": 867,
  "велосипед stark'23 tactic": 868,
  'велосипед stern motion': 869,
  'велосипед горный cube': 870,
  'велосипед горный denton': 871,
  'велосипед горный ghost': 872,
  'велосипед горный giant': 873,
  'велосипед горный merida': 874,
  'велосипед горный polygon': 875,
  'велосипед горный roces': 876,
  'велосипед горный scott': 877,
  'велосипед горный stern': 878,
  'велосипед горный trek': 879,
  'велосипед горный детский': 880,
  'велосипед горный женский': 881,
  'велосипед горный унисекс': 882,
  'велосипед городской bear': 883,
  'велосипед городской giant': 884,
  'велосипед городской haro': 885,
  'велосипед городской merida': 886,
  'велосипед городской polygon': 887,
  'велосипед городской scott': 888,
  'велосипед городской stern': 889,
  'велосипед городской trek': 890,
  'велосипед городской женский': 891,
  'велосипед городской унисекс': 892,
  'велосипед гравийный bear': 893,
  'велосипед гравийный polygon': 894,
  'велосипед гравийный roces': 895,
  'велосипед детский haro': 896,
  'велосипед детский maxiscoo': 897,
  'велосипед детский scott': 898,
  'велосипед детский stern': 899,
  'велосипед детский trek': 900,
  'велосипед детский для': 901,
  'велосипед детский трехколесный': 902,
  'велосипед детский унисекс': 903,
  'велосипед для девочек': 904,
  'велосипед для мальчиков': 905,
  'велосипед подростковый merida': 906,
  'велосипед подростковый polygon': 907,
  'велосипед подростковый roces': 908,
  'велосипед подростковый scott': 909,
  'велосипед подростковый stark': 910,
  'велосипед подростковый stern': 911,
  'велосипед подростковый trek': 912,
  'велосипед подростковый для': 913,
  'велосипед подростковый женский': 914,
  'велосипед складной denton': 915,
  'велосипед складной stern': 916,
  'велосипед складной tern': 917,
  'велосипед шоссейный bear': 918,
  'велосипед шоссейный cube': 919,
  'велосипед шоссейный giant': 920,
  'велосипед шоссейный polygon': 921,
  'велосипед шоссейный scott': 922,
  'велосипед шоссейный trek': 923,
  'велосипед шоссейный мужской': 924,
  'велосипед шоссейный унисекс': 925,
  'велосипедки для девочек': 926,
  'велосипедки для девочки': 927,
  'велосипедки для мальчиков': 928,
  'велосипедки женские adidas': 929,
  'велосипедки женские asics': 930,
  'велосипедки женские bona': 931,
  'велосипедки женские champion': 932,
  'велосипедки женские craft': 933,
  'велосипедки женские demix': 934,
  'велосипедки женские ellesse': 935,
  'велосипедки женские fila': 936,
  'велосипедки женские freddy': 937,
  'велосипедки женские joss': 938,
  'велосипедки женские kappa': 939,
  'велосипедки женские nike': 940,
  'велосипедки женские odlo': 941,
  'велосипедки женские protest': 942,
  'велосипедки женские puma': 943,
  'велосипедки женские reebok': 944,
  'велосипедки женские termit': 945,
  'велосипедки женские vans': 946,
  'велосипедки женские wilson': 947,
  'велосипедки женские x-bionic': 948,
  'велосипедки женские с': 949,
  'велосипедки мужские asics': 950,
  'велосипедки мужские craft': 951,
  'велосипедки мужские demix': 952,
  'велосипедки мужские nike': 953,
  'велосипедки мужские x-bionic': 954,
  'велосипедная корзина stern': 955,
  'велосипедная корзина складная': 956,
  'велосипедная сумка cyclotech': 957,
  'велосипедная сумка topeak': 958,
  'велосипедный компьютер cat': 959,
  'велосипедный компьютер cyclotech ': 960,
  'велосипедный компьютер stern': 961,
  'велосипедный шампунь daytona': 962,
  'велостанок elite novo': 963,
  'велостанок elite qubo': 964,
  'велостанок elite suito-t': 965,
  'велотренажер kettler air': 966,
  'велотренажер kettler airpower': 967,
  'велотренажер kettler ergo': 968,
  'велотренажер kettler giro': 969,
  'велотренажер kettler golf': 970,
  'велотренажер kettler polo': 971,
  'велотренажер kettler racer': 972,
  'велотренажер nordictrack vx': 973,
  'велотренажер pro-form магнитный': 974,
  'велотренажер torneo compacta': 975,
  'велотренажер магнитный kettler': 976,
  'велотренажер магнитный nordictrack': 977,
  'велотренажер магнитный pro-form': 978,
  'велотренажер магнитный torneo': 979,
  'велотуфли bontrager circuit': 980,
  'велотуфли bontrager velocis': 981,
  'велошорты dainese': 982,
  'велошорты женские demix': 983,
  'велошорты мужские bontrager': 984,
  'велошорты мужские dainese': 985,
  'велошорты мужские demix': 986,
  'велошорты мужские scott': 987,
  'велоэргометр torneo favourit': 988,
  'вентилятор outventure': 989,
  'веревка outventure  4': 990,
  'веревка для крепления': 991,
  'веревки-растяжки outventure 2': 992,
  'весло aqua marina': 993,
  'весло greenhouse разборное': 994,
  'весло jobe': 995,
  'весло jp-australia 23': 996,
  'весло rst для': 997,
  'весло вольный ветер': 998,
  'весло вольный ветер ': 999,
  ...}}

2. Подготовка данных для кластеризации¶

In [4]:
# создадим новую колонку где отметить новую маркетинговую компанию
# Создаем условие: city=1134
condition = (df_summary['city'] == 1188)
# Создаем новую колонку с метками 1/0
df_summary['marketing_three'] = condition.astype(int)
In [5]:
# One-hot encoding для product_sex
ohe = OneHotEncoder(sparse_output=False)
ohe.fit(df_summary[['product_sex']]) #Идентифицировать параметры преобразования
ohe_fuet = ohe.transform(df_summary[['product_sex']]) #Применить преобразование с заданными параметрами на тех же данных
df_summary[ohe.get_feature_names_out()] = ohe_fuet
In [6]:
# скопируем датафрейм
df = df_summary.copy()
In [8]:
# удаление ненужных колонок
df = df.drop(['id', 'dt', 'has_anomaly', 'no_discount', 'product', 'product_sex', 
              'colour', 'city', 'marketing_one', 'marketing_two', 'marketing_three'], axis=1)

# id - идентификатор (не несет информации для кластеризации)

# dt - дата/время (может создавать шум)

# has_anomaly - аномалии (может исказить кластеризацию)

# no_discount - это просто означает группу A из АБ-теста

# product, city - высококардинальные признаки т.е. много уникальных значений
In [9]:
df.head()
Out[9]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
0 13599 1 0 36 1 0.5072 881 1.0 0.0 0.0 0.0
1 1499 0 0 36 1 0.5072 5411 0.0 0.0 0.0 1.0
2 4799 0 0 36 1 0.5072 3196 0.0 0.0 0.0 1.0
3 1599 0 1 31 1 0.4304 803 0.0 1.0 0.0 0.0
4 7199 0 1 31 1 0.4304 3181 0.0 0.0 0.0 1.0
In [149]:
# Масштабирование всех данных 
scaler = StandardScaler()
df_sc = scaler.fit_transform(df)
len(df_sc)
Out[149]:
780113
In [46]:
# создадим выборку из 100 тысяч строк
df_samp = df.sample(n=100000, random_state=42)

# Масштабирование данных
scaler = StandardScaler()
df_scaler = scaler.fit_transform(df_samp)

np.save('data/df_scaler.npy', df_scaler)

len(df_scaler)
Out[46]:
100000
In [131]:
len(df_scaler)
Out[131]:
100000
In [18]:
# В будущем можно загрузить эти данные
df_scaler = np.load('data/df_scaler.npy')
In [12]:
# Уменьшение размерности для визуализации 100 тысяч строк
tsne = TSNE(n_components=2)
# размерность итогового пространства - n_components=2(2D)
df_tsne = tsne.fit_transform(df_scaler)

# Сохраняем результат в файл
np.save('data/tsne_results.npy', df_tsne)
In [75]:
# В будущем можно загрузить эти данные
df_tsne = np.load('data/tsne_results.npy')
In [77]:
df_tsne
Out[77]:
array([[ 106.358   ,   59.943077],
       [ -26.844215,   20.371452],
       [  -3.723406,  114.851685],
       ...,
       [  73.29499 ,   62.124836],
       [  20.110186, -130.97487 ],
       [ -31.04174 ,  -60.895477]], dtype=float32)
In [13]:
# создадим выборку из 20 тысяч строк
df_samp20 = df.sample(n=20000, random_state=42)

# Масштабирование данных
scaler = StandardScaler()
df_scaler20 = scaler.fit_transform(df_samp20)

np.save('data/df_scaler20.npy', df_scaler20)
len(df_scaler20)
Out[13]:
20000
In [14]:
# Уменьшение размерности для визуализации 20 тысяч строк
tsne = TSNE(n_components=2)
# размерность итогового пространства - n_components=2(2D)
df_tsne20 = tsne.fit_transform(df_scaler20)

# Сохраняем результат в файл
np.save('data/tsne_results20.npy', df_tsne20)
In [ ]:
# В будущем можно загрузить эти данные
df_tsne20 = np.load('data/tsne_results.npy')

3. Иерархическая кластеризация¶

In [15]:
def plot_dendrogram(model, **kwargs):
    counts = np.zeros(model.children_.shape[0])
    n_samples = len(model.labels_)
    for i, merge in enumerate(model.children_):
        current_count = 0
        for child_idx in merge:
            if child_idx < n_samples:
                current_count += 1
            else:
                current_count += counts[child_idx - n_samples]
        counts[i] = current_count
    linkage_matrix = np.column_stack(
          [model.children_, model.distances_, counts]
      ).astype(float)
    dendrogram(linkage_matrix, **kwargs)
In [16]:
model = AgglomerativeClustering(distance_threshold=0, n_clusters=None)
model = model.fit(df_scaler20)
plt.figure(figsize=(18, 10))
plt.title('Дендрограмма иерархической кластеризации 20 тысяч строк')
plot_dendrogram(model, truncate_mode='level', p=7)
plt.show()
No description has been provided for this image
In [17]:
# кластограмм методом иерархии
cgram = Clustergram(range(1, 13), method='hierarchical', linkage='ward')
cgram.fit(df_scaler20)

ax = cgram.plot(
    figsize=(10, 8),
    line_style=dict(color=ugg.COLORS[1]),
    cluster_style={'color': ugg.COLORS[2]},
)

ax.yaxis.grid(False)
sns.despine(offset=10)
No description has been provided for this image
In [18]:
# Настройка русского шрифта
plt.rcParams['font.family'] = 'DejaVu Sans'  # Шрифт, поддерживающий кириллицу
mpl.rcParams['axes.unicode_minus'] = False  # Корректное отображение минусов

# Создаем сетку графиков
fig, axes = plt.subplots(nrows=5, ncols=2, figsize=(15, 32))
fig.suptitle('Визуализация иерархической кластеризации при 100 тысяч строк', fontsize=16)

# Список количества кластеров
n_clusters_list = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

# Перебираем все варианты кластеризации
for i, n_clusters in enumerate(n_clusters_list):
    # Вычисляем позицию графика
    row = i // 2
    col = i % 2
    
    # Создаем и обучаем модель
    clustering = AgglomerativeClustering(n_clusters=n_clusters)
    labels = clustering.fit_predict(df_scaler20)
    
    # Визуализация на соответствующем subplot
    ax = axes[row, col]
    scatter = ax.scatter(
        df_tsne20[:, 0], 
        df_tsne20[:, 1], 
        s=10, 
        c=labels,
        cmap='Spectral'  # Цветовая схема для кластеров
    )
    
    # Настройки графика
    ax.set_title(f'Кластеризация на {n_clusters} групп', fontsize=14)
    ax.set_xlabel('t-SNE измерение 1', fontsize=12)
    ax.set_ylabel('t-SNE измерение 2', fontsize=12)
    
# Скрываем последний пустой subplot (если нужно)
if len(n_clusters_list) < 6:
    axes[2, 1].axis('off')

# Оптимизируем расположение
plt.tight_layout(rect=[0, 0, 1, 0.97])  # Учитываем общий заголовок
plt.show()
No description has been provided for this image

3 кластера¶

In [132]:
clustering = AgglomerativeClustering(n_clusters=3).fit(df_scaler20)

df_samp20['cluster'] = clustering.labels_

df_samp20.cluster.value_counts()
Out[132]:
cluster
0    10077
2     5130
1     4793
Name: count, dtype: int64
In [134]:
# 3 кластера
df_samp20.groupby('cluster').mean()
Out[134]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 4894.867421 0.378287 0.695445 34.978664 0.617644 0.447639 3436.793788 0.094671 0.786246 0.000000 0.119083
1 4007.440643 0.490298 0.184227 43.087419 1.000000 0.493051 3361.486752 1.000000 0.000000 0.000000 0.000000
2 7699.963938 0.194932 0.615400 40.731774 0.959454 0.460133 3562.518129 0.001949 0.004483 0.092203 0.901365
In [21]:
# Вычисляем метрики
silhouette = silhouette_score(df_scaler20, df_samp20['cluster'])
calinski = calinski_harabasz_score(df_scaler20, df_samp20['cluster'])
davies = davies_bouldin_score(df_scaler20, df_samp20['cluster'])

print("Метрики качества кластеризации:")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации:
Silhouette Score: 0.214
Calinski-Harabasz Index: 3352.556
Davies-Bouldin Index: 1.907

4 кластера¶

In [22]:
clustering = AgglomerativeClustering(n_clusters=4).fit(df_scaler20)

df_samp20['cluster'] = clustering.labels_

df_samp20.cluster.value_counts()
Out[22]:
cluster
1    6012
0    5130
3    4793
2    4065
Name: count, dtype: int64
In [23]:
# 4 кластера
df_samp20.groupby('cluster').mean()
Out[23]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 7699.963938 0.194932 0.615400 40.731774 0.959454 0.460133 3562.518129 0.001949 0.004483 0.092203 0.901365
1 5171.550732 0.387392 0.713074 42.125749 1.000000 0.452436 3439.998170 0.000000 1.000000 0.000000 0.000000
2 4485.661993 0.364822 0.669373 24.408364 0.052153 0.440546 3432.054613 0.234686 0.470111 0.000000 0.295203
3 4007.440643 0.490298 0.184227 43.087419 1.000000 0.493051 3361.486752 1.000000 0.000000 0.000000 0.000000
In [24]:
# Вычисляем метрики
silhouette = silhouette_score(df_scaler20, df_samp20['cluster'])
calinski = calinski_harabasz_score(df_scaler20, df_samp20['cluster'])
davies = davies_bouldin_score(df_scaler20, df_samp20['cluster'])

print("Метрики качества кластеризации:")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации:
Silhouette Score: 0.244
Calinski-Harabasz Index: 3698.737
Davies-Bouldin Index: 1.669

5 кластера¶

In [25]:
clustering = AgglomerativeClustering(n_clusters=5).fit(df_scaler20)

df_samp20['cluster'] = clustering.labels_

df_samp20.cluster.value_counts()
Out[25]:
cluster
1    6012
3    4793
2    4657
0    4065
4     473
Name: count, dtype: int64
In [26]:
# 5 кластера
df_samp20.groupby('cluster').mean()
Out[26]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 4485.661993 0.364822 0.669373 24.408364 0.052153 0.440546 3432.054613 0.234686 0.470111 0.0 0.295203
1 5171.550732 0.387392 0.713074 42.125749 1.000000 0.452436 3439.998170 0.000000 1.000000 0.0 0.000000
2 8160.181018 0.182950 0.642259 40.983680 0.970582 0.458877 3564.595233 0.002147 0.004939 0.0 0.992914
3 4007.440643 0.490298 0.184227 43.087419 1.000000 0.493051 3361.486752 1.000000 0.000000 0.0 0.000000
4 3168.820296 0.312896 0.350951 38.251586 0.849894 0.472494 3542.067653 0.000000 0.000000 1.0 0.000000
In [27]:
# Вычисляем метрики
silhouette = silhouette_score(df_scaler20, df_samp20['cluster'])
calinski = calinski_harabasz_score(df_scaler20, df_samp20['cluster'])
davies = davies_bouldin_score(df_scaler20, df_samp20['cluster'])

print("Метрики качества кластеризации:")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации:
Silhouette Score: 0.274
Calinski-Harabasz Index: 4130.978
Davies-Bouldin Index: 1.396

6 кластера¶

In [28]:
clustering = AgglomerativeClustering(n_clusters=6).fit(df_scaler20)

df_samp20['cluster'] = clustering.labels_

df_samp20.cluster.value_counts()
Out[28]:
cluster
1    6012
3    4793
0    4657
2    3019
5    1046
4     473
Name: count, dtype: int64
In [29]:
# 6 кластера
df_samp20.groupby('cluster').mean()
Out[29]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 8160.181018 0.182950 0.642259 40.983680 0.970582 0.458877 3564.595233 0.002147 0.004939 0.0 0.992914
1 5171.550732 0.387392 0.713074 42.125749 1.000000 0.452436 3439.998170 0.000000 1.000000 0.0 0.000000
2 4309.343491 0.357734 0.663796 27.555482 0.000000 0.498924 3496.166943 0.233190 0.477642 0.0 0.289169
3 4007.440643 0.490298 0.184227 43.087419 1.000000 0.493051 3361.486752 1.000000 0.000000 0.0 0.000000
4 3168.820296 0.312896 0.350951 38.251586 0.849894 0.472494 3542.067653 0.000000 0.000000 1.0 0.000000
5 4994.558317 0.385277 0.685468 15.325048 0.202677 0.272052 3247.011472 0.239006 0.448375 0.0 0.312620
In [30]:
# Вычисляем метрики
silhouette = silhouette_score(df_scaler20, df_samp20['cluster'])
calinski = calinski_harabasz_score(df_scaler20, df_samp20['cluster'])
davies = davies_bouldin_score(df_scaler20, df_samp20['cluster'])

print("Метрики качества кластеризации:")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации:
Silhouette Score: 0.301
Calinski-Harabasz Index: 4111.937
Davies-Bouldin Index: 1.278

7 кластера¶

In [31]:
clustering = AgglomerativeClustering(n_clusters=7).fit(df_scaler20)

df_samp20['cluster'] = clustering.labels_

df_samp20.cluster.value_counts()
Out[31]:
cluster
0    6012
1    4793
3    4399
2    3019
5    1046
4     473
6     258
Name: count, dtype: int64
In [32]:
# 7 кластера
df_samp20.groupby('cluster').mean()
Out[32]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 5171.550732 0.387392 0.713074 42.125749 1.000000 0.452436 3439.998170 0.000000 1.000000 0.0 0.000000
1 4007.440643 0.490298 0.184227 43.087419 1.000000 0.493051 3361.486752 1.000000 0.000000 0.0 0.000000
2 4309.343491 0.357734 0.663796 27.555482 0.000000 0.498924 3496.166943 0.233190 0.477642 0.0 0.289169
3 4831.156172 0.190043 0.633326 41.089566 0.974085 0.459663 3640.958172 0.000682 0.000227 0.0 0.999091
4 3168.820296 0.312896 0.350951 38.251586 0.849894 0.472494 3542.067653 0.000000 0.000000 1.0 0.000000
5 4994.558317 0.385277 0.685468 15.325048 0.202677 0.272052 3247.011472 0.239006 0.448375 0.0 0.312620
6 64921.344961 0.062016 0.794574 39.178295 0.910853 0.445470 2262.577519 0.027132 0.085271 0.0 0.887597
In [33]:
# Вычисляем метрики
silhouette = silhouette_score(df_scaler20, df_samp20['cluster'])
calinski = calinski_harabasz_score(df_scaler20, df_samp20['cluster'])
davies = davies_bouldin_score(df_scaler20, df_samp20['cluster'])

print("Метрики качества кластеризации:")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации:
Silhouette Score: 0.310
Calinski-Harabasz Index: 4137.285
Davies-Bouldin Index: 1.198

8 кластера¶

In [34]:
clustering = AgglomerativeClustering(n_clusters=8).fit(df_scaler20)

df_samp20['cluster'] = clustering.labels_

df_samp20.cluster.value_counts()
Out[34]:
cluster
1    4793
3    4399
2    4287
0    3019
7    1725
5    1046
4     473
6     258
Name: count, dtype: int64
In [35]:
# 8 кластера
df_samp20.groupby('cluster').mean()
Out[35]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 4309.343491 0.357734 0.663796 27.555482 0.000000 0.498924 3496.166943 0.233190 0.477642 0.0 0.289169
1 4007.440643 0.490298 0.184227 43.087419 1.000000 0.493051 3361.486752 1.000000 0.000000 0.0 0.000000
2 5646.458362 0.368556 1.000000 41.870306 1.000000 0.430400 3411.020994 0.000000 1.000000 0.0 0.000000
3 4831.156172 0.190043 0.633326 41.089566 0.974085 0.459663 3640.958172 0.000682 0.000227 0.0 0.999091
4 3168.820296 0.312896 0.350951 38.251586 0.849894 0.472494 3542.067653 0.000000 0.000000 1.0 0.000000
5 4994.558317 0.385277 0.685468 15.325048 0.202677 0.272052 3247.011472 0.239006 0.448375 0.0 0.312620
6 64921.344961 0.062016 0.794574 39.178295 0.910853 0.445470 2262.577519 0.027132 0.085271 0.0 0.887597
7 3991.302029 0.434203 0.000000 42.760580 1.000000 0.507200 3512.012754 0.000000 1.000000 0.0 0.000000
In [36]:
# Вычисляем метрики
silhouette = silhouette_score(df_scaler20, df_samp20['cluster'])
calinski = calinski_harabasz_score(df_scaler20, df_samp20['cluster'])
davies = davies_bouldin_score(df_scaler20, df_samp20['cluster'])

print("Метрики качества кластеризации:")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации:
Silhouette Score: 0.280
Calinski-Harabasz Index: 4040.695
Davies-Bouldin Index: 1.202

9 кластера¶

In [37]:
clustering = AgglomerativeClustering(n_clusters=9).fit(df_scaler20)

df_samp20['cluster'] = clustering.labels_

df_samp20.cluster.value_counts()
Out[37]:
cluster
1    4793
3    4399
2    4287
7    1725
0    1577
8    1442
5    1046
4     473
6     258
Name: count, dtype: int64
In [38]:
# 9 кластера
df_samp20.groupby('cluster').mean()
Out[38]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 3412.564997 0.305644 0.516804 27.770450 0.000000 0.512094 3565.869372 0.446417 0.000000 0.0 0.553583
1 4007.440643 0.490298 0.184227 43.087419 1.000000 0.493051 3361.486752 1.000000 0.000000 0.0 0.000000
2 5646.458362 0.368556 1.000000 41.870306 1.000000 0.430400 3411.020994 0.000000 1.000000 0.0 0.000000
3 4831.156172 0.190043 0.633326 41.089566 0.974085 0.459663 3640.958172 0.000682 0.000227 0.0 0.999091
4 3168.820296 0.312896 0.350951 38.251586 0.849894 0.472494 3542.067653 0.000000 0.000000 1.0 0.000000
5 4994.558317 0.385277 0.685468 15.325048 0.202677 0.272052 3247.011472 0.239006 0.448375 0.0 0.312620
6 64921.344961 0.062016 0.794574 39.178295 0.910853 0.445470 2262.577519 0.027132 0.085271 0.0 0.887597
7 3991.302029 0.434203 0.000000 42.760580 1.000000 0.507200 3512.012754 0.000000 1.000000 0.0 0.000000
8 5290.078363 0.414702 0.824549 27.320388 0.000000 0.484520 3419.938974 0.000000 1.000000 0.0 0.000000
In [39]:
# Вычисляем метрики
silhouette = silhouette_score(df_scaler20, df_samp20['cluster'])
calinski = calinski_harabasz_score(df_scaler20, df_samp20['cluster'])
davies = davies_bouldin_score(df_scaler20, df_samp20['cluster'])

print("Метрики качества кластеризации:")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации:
Silhouette Score: 0.301
Calinski-Harabasz Index: 3924.390
Davies-Bouldin Index: 1.276

10 кластера¶

In [40]:
clustering = AgglomerativeClustering(n_clusters=10).fit(df_scaler20)

df_samp20['cluster'] = clustering.labels_

df_samp20.cluster.value_counts()
Out[40]:
cluster
1    4793
3    4399
0    4287
7    1725
8    1442
2    1046
5     873
4     704
9     473
6     258
Name: count, dtype: int64
In [41]:
# 10 кластера
df_samp20.groupby('cluster').mean()
Out[41]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 5646.458362 0.368556 1.000000 41.870306 1.000000 0.430400 3411.020994 0.000000 1.000000 0.0 0.000000
1 4007.440643 0.490298 0.184227 43.087419 1.000000 0.493051 3361.486752 1.000000 0.000000 0.0 0.000000
2 4994.558317 0.385277 0.685468 15.325048 0.202677 0.272052 3247.011472 0.239006 0.448375 0.0 0.312620
3 4831.156172 0.190043 0.633326 41.089566 0.974085 0.459663 3640.958172 0.000682 0.000227 0.0 0.999091
4 4247.951705 0.453125 0.269886 29.019886 0.000000 0.534218 3218.146307 1.000000 0.000000 0.0 0.000000
5 2738.896907 0.186712 0.715922 26.762887 0.000000 0.494253 3846.278351 0.000000 0.000000 0.0 1.000000
6 64921.344961 0.062016 0.794574 39.178295 0.910853 0.445470 2262.577519 0.027132 0.085271 0.0 0.887597
7 3991.302029 0.434203 0.000000 42.760580 1.000000 0.507200 3512.012754 0.000000 1.000000 0.0 0.000000
8 5290.078363 0.414702 0.824549 27.320388 0.000000 0.484520 3419.938974 0.000000 1.000000 0.0 0.000000
9 3168.820296 0.312896 0.350951 38.251586 0.849894 0.472494 3542.067653 0.000000 0.000000 1.0 0.000000
In [42]:
# Вычисляем метрики
silhouette = silhouette_score(df_scaler20, df_samp20['cluster'])
calinski = calinski_harabasz_score(df_scaler20, df_samp20['cluster'])
davies = davies_bouldin_score(df_scaler20, df_samp20['cluster'])

print("Метрики качества кластеризации:")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации:
Silhouette Score: 0.310
Calinski-Harabasz Index: 3801.888
Davies-Bouldin Index: 1.200

Дендограмма определила 5 кластеров.

Лучшие метрики при 7-ти кластерах.

4. Кластеризация К-средних¶

In [43]:
# Метод локтя для K-means (используем подвыборку для скорости)
scaler = StandardScaler()
df_scaler = scaler.fit_transform(df)
inertia = []
N = 26
for i in range(2, N):
    kmeans = KMeans(n_clusters=i, random_state=1).fit(df_scaler)
    inertia.append(np.sqrt(kmeans.inertia_))
    
plt.figure(figsize=(14, 8))
plt.plot(np.arange(2, N), inertia, marker='s', color='blue', linewidth=2)
plt.title('Метод локтя для определения оптимального k', fontsize=14)
plt.xlabel('Число кластеров', fontsize=12)
plt.ylabel('Итераций', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.xticks(np.arange(2, N))
plt.show()
No description has been provided for this image

Метод локтя определил 7 кластера.

In [48]:
# Настройка русского шрифта
plt.rcParams['font.family'] = 'DejaVu Sans'
plt.rcParams['font.size'] = 12
mpl.rcParams['axes.unicode_minus'] = False

# Создаем сетку графиков с автоматической регулировкой
fig, axes = plt.subplots(nrows=5, ncols=2, figsize=(16, 34), 
                         constrained_layout=True)  # Используем constrained_layout
fig.suptitle('Визуализация кластеризации методом К-средних при 100 тысячах строк', 
             fontsize=18, y=1.02)

# Список количества кластеров
n_clusters_list = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

# Перебираем все варианты кластеризации
for i, n_clusters in enumerate(n_clusters_list):
    # Вычисляем позицию графика
    row = i // 2
    col = i % 2
    
    # Создаем и обучаем модель
    kmeans = KMeans(n_clusters=n_clusters, random_state=42)
    labelsk = kmeans.fit_predict(df_scaler)
    
 
      # Визуализация на соответствующем subplot
    ax = axes[row, col]
    scatter = ax.scatter(
        df_tsne[:, 0], 
        df_tsne[:, 1], 
        s=10, 
        c=labelsk,
        cmap='Spectral'  # Цветовая схема для кластеров
    )


    
    # Настройки графика
    ax.set_title(f'Кластеризация на {n_clusters} групп', fontsize=14)
    ax.set_xlabel('t-SNE измерение 1', fontsize=12)
    ax.set_ylabel('t-SNE измерение 2', fontsize=12)
    
    

# Убираем пустые подписи для более аккуратного вида
for ax in axes.flat:
    ax.label_outer()

plt.show()
No description has been provided for this image
In [49]:
# Кластограмм методом к_средних
cgram = Clustergram(range(1, 11), n_init=1000, method='kmeans')
cgram.fit(df_scaler)

ax = cgram.plot(
    figsize=(10, 8),
    line_style=dict(color=ugg.COLORS[1]),
    cluster_style={'color': ugg.COLORS[2]},
)

ax.yaxis.grid(False)
sns.despine(offset=10)
K=1 skipped. Mean computed from data directly.
K=2 fitted in 49.189 seconds.
K=3 fitted in 35.585 seconds.
K=4 fitted in 35.918 seconds.
K=5 fitted in 48.610 seconds.
K=6 fitted in 54.782 seconds.
K=7 fitted in 59.734 seconds.
K=8 fitted in 64.999 seconds.
K=9 fitted in 75.359 seconds.
K=10 fitted in 82.836 seconds.
No description has been provided for this image
In [51]:
# функция для поиска товара по номеру
def search_product(target_ids):
    results = {}
    for product_name, product_id in mappings['product_group'].items():
        if product_id in target_ids:
            results[product_id] = product_name
    return results

2 кластера¶

In [81]:
kmeans = KMeans(n_clusters=2, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[81]:
cluster
0    56443
1    43557
Name: count, dtype: int64
In [82]:
df_samp.groupby('cluster').mean()
Out[82]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 6492.754000 0.310703 0.968499 36.191733 0.737771 0.422196 3391.472477 0.106302 0.529809 0.016069 0.347820
1 4035.742246 0.418922 0.021122 41.361549 0.880915 0.511664 3533.329109 0.521661 0.229630 0.034966 0.213743
In [83]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.192
Calinski-Harabasz Index: 20383.053
Davies-Bouldin Index: 2.031

3 кластера¶

In [84]:
kmeans = KMeans(n_clusters=3, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[84]:
cluster
0    39906
2    31373
1    28721
Name: count, dtype: int64
In [85]:
# 3 кластера
df_samp.groupby('cluster').mean()
Out[85]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 5257.437979 0.387736 0.739162 38.172305 0.778003 0.447331 3418.596677 0.000000 1.0 0.000000 0.000000
1 4142.486856 0.489711 0.210090 40.145190 0.843390 0.487268 3341.361338 1.000000 0.0 0.000000 0.000000
2 6804.438657 0.199088 0.639212 37.230772 0.788640 0.454868 3599.794059 0.000032 0.0 0.077455 0.922513
In [86]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.262
Calinski-Harabasz Index: 21520.391
Davies-Bouldin Index: 1.693

4 кластера¶

In [87]:
kmeans = KMeans(n_clusters=4, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[87]:
cluster
0    37584
2    29594
1    27351
3     5471
Name: count, dtype: int64
In [88]:
# 4 кластера
df_samp.groupby('cluster').mean()
Out[88]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 5243.549968 0.385829 0.733850 39.572691 0.815613 0.458327 3425.232599 0.000000 1.00000 0.000000 0.000000
1 4133.651091 0.488940 0.202881 41.408577 0.871412 0.497730 3347.609630 1.000000 0.00000 0.000000 0.000000
2 6784.668345 0.199567 0.633439 38.542678 0.824627 0.465916 3605.526762 0.000000 0.00000 0.077651 0.922349
3 5727.799488 0.366295 0.677938 15.327545 0.204716 0.272182 3350.342716 0.250594 0.42442 0.024127 0.300859
In [89]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.279
Calinski-Harabasz Index: 19339.308
Davies-Bouldin Index: 1.523

5 кластера¶

In [90]:
kmeans = KMeans(n_clusters=5, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[90]:
cluster
2    28842
1    27887
0    23083
4    14717
3     5471
Name: count, dtype: int64
In [91]:
# 5 кластера
df_samp.groupby('cluster').mean()
Out[91]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 5974.283369 0.000000 0.741671 39.939176 0.819521 0.457567 3476.678508 0.000000 1.000000 0.000000 0.000000
1 4093.684907 0.498763 0.198982 41.371320 0.872485 0.497983 3345.980098 0.980780 0.000000 0.019220 0.000000
2 6905.148845 0.178698 0.642466 38.519381 0.822585 0.465300 3615.253415 0.000000 0.000000 0.053602 0.946398
3 5727.799488 0.366295 0.677938 15.327545 0.204716 0.272182 3350.342716 0.250594 0.424420 0.024127 0.300859
4 4056.211932 1.000000 0.725488 38.994632 0.809880 0.459198 3340.607189 0.000000 0.985323 0.014677 0.000000
In [92]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.234
Calinski-Harabasz Index: 16804.874
Davies-Bouldin Index: 1.607

6 кластера¶

In [93]:
kmeans = KMeans(n_clusters=6, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[93]:
cluster
1    27351
2    27296
0    23083
4    14501
3     5339
5     2430
Name: count, dtype: int64
In [94]:
# 6 кластера
df_samp.groupby('cluster').mean()
Out[94]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 5974.283369 0.000000 0.741671 39.939176 0.819521 0.457567 3476.678508 0.00000 1.000000 0.0 0.000000
1 4133.651091 0.488940 0.202881 41.408577 0.871412 0.497730 3347.609630 1.00000 0.000000 0.0 0.000000
2 7077.397458 0.188416 0.658375 38.488203 0.818655 0.464225 3613.262603 0.00000 0.000000 0.0 1.000000
3 5785.285821 0.368234 0.681026 15.335456 0.203783 0.272127 3344.345758 0.25679 0.434913 0.0 0.308297
4 4080.353010 1.000000 0.721399 38.989311 0.809392 0.459537 3343.339908 0.00000 1.000000 0.0 0.000000
5 3312.750617 0.329630 0.348971 37.876132 0.860082 0.474501 3517.944856 0.00000 0.000000 1.0 0.000000
In [95]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.266
Calinski-Harabasz Index: 19836.070
Davies-Bouldin Index: 1.377

7 кластера¶

In [96]:
kmeans = KMeans(n_clusters=7, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[96]:
cluster
1    27305
2    25981
0    23015
4    14501
3     5280
5     2430
6     1488
Name: count, dtype: int64
In [97]:
df_samp.groupby('cluster').mean()
Out[97]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 5809.926179 0.000000 0.741473 39.952292 0.820117 0.457559 3478.130089 0.000000 1.000000 0.0 0.000000
1 4043.189343 0.489691 0.202417 41.411170 0.871415 0.497765 3349.728877 1.000000 0.000000 0.0 0.000000
2 4084.851738 0.194103 0.649013 38.509526 0.819022 0.464942 3689.297795 0.000000 0.000000 0.0 1.000000
3 4848.192424 0.371970 0.679356 15.339773 0.203598 0.272166 3359.396970 0.259091 0.439015 0.0 0.301894
4 4080.353010 1.000000 0.721399 38.989311 0.809392 0.459537 3343.339908 0.000000 1.000000 0.0 0.000000
5 3312.750617 0.329630 0.348971 37.876132 0.860082 0.474501 3517.944856 0.000000 0.000000 1.0 0.000000
6 66662.924059 0.069892 0.829973 37.088710 0.780914 0.444151 2145.797043 0.032930 0.048387 0.0 0.918683
In [98]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.281
Calinski-Harabasz Index: 19859.963
Davies-Bouldin Index: 1.277

8 кластера¶

In [99]:
kmeans = KMeans(n_clusters=8, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[99]:
cluster
1    26509
0    22236
5    14718
6    10003
4     9876
2     8196
7     6032
3     2430
Name: count, dtype: int64
In [100]:
df_samp.groupby('cluster').mean()
Out[100]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 5648.255262 0.372639 1.000000 42.285618 0.982371 0.431077 3380.269203 0.000000 1.000000 0.0 0.000000
1 4094.403222 0.489720 0.177110 41.981817 0.899393 0.498568 3350.573881 1.000000 0.000000 0.0 0.000000
2 4328.133724 0.225720 0.000000 41.370425 0.971938 0.508637 3847.795754 0.000000 0.000000 0.0 1.000000
3 3312.750617 0.329630 0.348971 37.876132 0.860082 0.474501 3517.944856 0.000000 0.000000 1.0 0.000000
4 5422.681146 0.428311 0.870494 21.131025 0.078068 0.395705 3332.085055 0.223674 0.776326 0.0 0.000000
5 8502.843185 0.168909 0.991575 40.384291 0.997962 0.427177 3500.409159 0.000272 0.000000 0.0 0.999728
6 4077.691692 0.403879 0.000000 41.419874 0.880736 0.513306 3547.764071 0.000000 1.000000 0.0 0.000000
7 7478.520723 0.183853 0.765086 23.656499 0.000166 0.441485 3538.121684 0.000000 0.000000 0.0 1.000000
In [101]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.291
Calinski-Harabasz Index: 18074.362
Davies-Bouldin Index: 1.400

9 кластера¶

In [102]:
kmeans = KMeans(n_clusters=9, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[102]:
cluster
1    26507
5    14718
8    12996
6    10003
4     9744
0     9374
2     8196
7     6032
3     2430
Name: count, dtype: int64
In [103]:
df_samp.groupby('cluster').mean()
Out[103]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 3919.298485 0.361745 0.999787 42.687007 0.975571 0.431103 5503.313847 0.000000 1.000000 0.0 0.000000
1 4094.726940 0.489644 0.177161 41.984532 0.899347 0.498591 3350.081526 1.000000 0.000000 0.0 0.000000
2 4328.133724 0.225720 0.000000 41.370425 0.971938 0.508637 3847.795754 0.000000 0.000000 0.0 1.000000
3 3312.750617 0.329630 0.348971 37.876132 0.860082 0.474501 3517.944856 0.000000 0.000000 1.0 0.000000
4 5423.668001 0.430521 0.868637 20.868740 0.077586 0.395042 3317.459257 0.226909 0.773091 0.0 0.000000
5 8502.843185 0.168909 0.991575 40.384291 0.997962 0.427177 3500.409159 0.000272 0.000000 0.0 0.999728
6 4077.691692 0.403879 0.000000 41.419874 0.880736 0.513306 3547.764071 0.000000 1.000000 0.0 0.000000
7 7478.520723 0.183853 0.765086 23.656499 0.000166 0.441485 3538.121684 0.000000 0.000000 0.0 1.000000
8 6891.419360 0.379578 1.000000 41.972299 0.978532 0.431158 1860.395737 0.000000 1.000000 0.0 0.000000
In [104]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.266
Calinski-Harabasz Index: 16976.066
Davies-Bouldin Index: 1.402

10 кластера¶

In [105]:
kmeans = KMeans(n_clusters=10, random_state=42).fit(df_scaler)

df_samp['cluster'] = kmeans.labels_

df_samp.cluster.value_counts()
Out[105]:
cluster
1    26470
5    13827
8    12963
6     9992
4     9715
0     9375
2     8073
7     5815
3     2430
9     1340
Name: count, dtype: int64
In [106]:
df_samp.groupby('cluster').mean()
Out[106]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 3926.922987 0.361813 0.999787 42.686400 0.975680 0.431098 5503.101440 0.000000 1.000000 0.0 0.000000
1 4021.655157 0.490253 0.176917 41.987155 0.899358 0.498609 3351.764261 1.000000 0.000000 0.0 0.000000
2 3635.075313 0.227920 0.000000 41.400099 0.972749 0.508595 3866.181345 0.000000 0.000000 0.0 1.000000
3 3312.750617 0.329630 0.348971 37.876132 0.860082 0.474501 3517.944856 0.000000 0.000000 1.0 0.000000
4 5244.544519 0.431806 0.868657 20.867010 0.077612 0.394981 3318.885950 0.227072 0.772928 0.0 0.000000
5 4502.028640 0.175743 0.993202 40.379186 0.998120 0.426941 3599.833080 0.000000 0.000000 0.0 1.000000
6 4011.525320 0.404323 0.000000 41.416233 0.880705 0.513308 3548.337270 0.000000 1.000000 0.0 0.000000
7 4662.697678 0.188478 0.759759 23.622012 0.000172 0.441660 3586.584179 0.000000 0.000000 0.0 1.000000
8 6752.103603 0.380467 1.000000 41.978400 0.978554 0.431157 1857.155674 0.000000 1.000000 0.0 0.000000
9 69900.529851 0.060448 0.841791 37.390299 0.802239 0.441087 2126.777612 0.034328 0.050000 0.0 0.915672
In [107]:
# Вычисляем метрики на подвыборке
silhouette = silhouette_score(df_scaler, df_samp['cluster'])
calinski = calinski_harabasz_score(df_scaler, df_samp['cluster'])
davies = davies_bouldin_score(df_scaler, df_samp['cluster'])

# Выводим результаты
print("Метрики качества кластеризации (на подвыборке из 100,000 строк):")
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski:.3f}")
print(f"Davies-Bouldin Index: {davies:.3f}")
Метрики качества кластеризации (на подвыборке из 100,000 строк):
Silhouette Score: 0.277
Calinski-Harabasz Index: 18057.783
Davies-Bouldin Index: 1.296

5. Вывод¶

Интерпретация метрик

Silhouette Score: Оценивает насколько похож объект на свой кластер compared to другие кластеры

Значение от -1 до 1

0.5: Хорошее разделение кластеров

0.25-0.5: Умеренное разделение

< 0.25: Слабое разделение

Calinski-Harabasz Index: Отношение межкластерной дисперсии к внутрикластерной

Чем выше значение, тем лучше разделение кластеров

Davies-Bouldin Index: Среднее сходство между каждым кластером и его наиболее похожим кластером

Чем ниже значение, тем лучше разделение кластеров

Значения < 0.5 считаются хорошими

Проанализировав до 10 кластеров метрики, на 6-ти кластерах метрики самые лучшие, поми этого метод локтя определил от 4 до 9 кластеров.

Остановлюсь на 6 кластеров, характеристику кластров буду описывать из всего датасета, чтобы результат был точнее.

In [150]:
kmeans = KMeans(n_clusters=7, random_state=42).fit(df_sc)

df['cluster'] = kmeans.labels_

df.cluster.value_counts()
Out[150]:
cluster
0    213516
4    179704
1    113663
3    106321
2    103104
6     45491
5     18314
Name: count, dtype: int64
In [151]:
df.groupby('cluster').mean()
Out[151]:
cost base_sale gender age education personal_coef product_group product_sex_0 product_sex_1 product_sex_2 product_sex_3
cluster
0 7088.764753 0.186665 0.652120 38.483645 0.819119 0.464694 3605.080973 0.000000 0.000000 0.0 1.000000
1 4083.650986 1.000000 0.721660 39.153111 0.809094 0.459531 3357.717120 0.000000 1.000000 0.0 0.000000
2 3205.458964 1.000000 0.186103 41.194037 0.873788 0.498945 3362.333586 1.000000 0.000000 0.0 0.000000
3 4916.966554 0.000000 0.186285 42.344278 0.902663 0.497817 3348.095513 1.000000 0.000000 0.0 0.000000
4 5947.040322 0.000006 0.744541 39.982549 0.817739 0.457415 3466.458087 0.001892 0.998108 0.0 0.000000
5 3357.700502 0.334225 0.354756 37.927214 0.853391 0.474090 3512.252375 0.000000 0.000000 1.0 0.000000
6 5741.121541 0.333824 0.693742 15.891627 0.186740 0.286645 3383.371392 0.313557 0.407971 0.0 0.278473
In [152]:
mode_results = df.groupby('cluster').agg({
    'product_group': lambda x: x.value_counts().index[0] if not x.value_counts().empty else None
}).reset_index()
# Получаем названия продуктов
product_dict = search_product(mode_results['product_group'].tolist())
mode_results['product'] = mode_results['product_group'].map(product_dict)
mode_results
Out[152]:
cluster product_group product
0 0 878 велосипед горный stern
1 1 2424 кроссовки мужские puma
2 2 2366 кроссовки для девочек
3 3 2375 кроссовки женские demix
4 4 2422 кроссовки мужские nike
5 5 4863 сабо детские crocs
6 6 2422 кроссовки мужские nike

Кластер 0 (213516 покупок-самые большие покупки):

  • преобладают мужчины (65%), с возрастом 38 лет и средним образованием (82%).
  • с высоким средним чеком 7088, низкая чувствительность к базовой скидке (19%).
  • предпочитают товары без гендерной принадлежности (100%) и чаще велосипед горный stern.

Использовать программы лояльности вместо скидок, предлагать премиум товары без гендерной принадлежности.

Кластер 1 (113663 покупок):

  • преобладают мужчины (72%), с возрастом 39 лет и средним образованием (81%).
  • со средним чеком 4083, полная чувствительность к базовой скидке (100%).
  • предпочитают только мужские товары (100%) и чаще кроссовки мужские puma.

Рекламу настраивать на мужской пол выше среднего возраста и средним образованием, товары знаменитых брендов, использовать программы скидки и кэшбэки.

Кластер 2 (103104 покупок):

  • преобладают женщины (81%), с возрастом 41 года и средним образованием (87%).
  • с низким средним чеком 3205, полная чувствительность к базовой скидке (100%).
  • предпочитают исключительно женские товары (100%) и чаще кроссовки для девочек.

Рекламу настраивать на женский пол ниже среднего возраста и средним образованием, использовать программы скидкок и кэшбэка.

Кластер 3 (106321 покупок):

  • преобладают женщины (81%), с возрастом 42 года и средним образованием (90%).
  • со средним чеком 4916, отсутствует чувствительность к базовой скидке (0%).
  • предпочитают исключительно женские товары (100%) и чаще кроссовки женские demix.

Рекламу настраивать на женский пол ниже среднего возраста и средним образованием, использовать программы лояльности вместо скидок.

Кластер 4 (179704 покупок):

  • преобладают мужчины (74%), со средним возрастом 40 лет и средним образованием (82%).
  • со средним чеком 5947, отсутствует чувствительность к базовой скидке (0%).
  • предпочитают мужские товары (99.9%) и чаще кроссовки мужские nike.

Рекламу настраивать на мужской пол выше среднего возраста и средним образованием, использовать программы лояльности вместо скидок.

Кластер 5 (18314 покупок - самые маленькие покупки):

  • преобладают женщины (65%), со средним возрастом 38 лет и средним образованием (85%).
  • с низким средним чеком 3357, умеренная чувствительность к базовой скидке (33%).
  • предпочитают детские товары (100%) и чаще сабо детские crocs.

Рекламу настраивать на женский пол ниже среднего возраста и средним образованием, предлагать бюджетный сегмент детских товаров, использовать умеренные скидки и кэшбэки.

Кластер 6 (45491 покупок):

  • преобладают мужчины (69%), со средним возрастом 16 лет и высшем образованием (81%).
  • со средним чеком 5741, умеренная чувствительность к базовой скидке (33%).
  • предпочитают мужские(41%), женские(31%), неопределённые(28%) товары и чаще кроссовки мужские nike.

Предлагать детские товары детям до 18 лет, использовать умеренные скидки и кэшбэки.

6. Анализ маркетинговых компаний¶

Первая маркетинговая компания в период с 5-го по 16-й день¶

In [177]:
# удаление ненужных колонок
df_one = df_summary.drop(['id', 'dt', 'has_anomaly', 'no_discount', 'product', 'product_sex', 
              'colour', 'city', 'marketing_two', 'marketing_three'], axis=1)
df_one = df_one[df_one['marketing_one']==1]
print('Размер таблицы: ', df_one.shape)
print()
print(df_one.mean())
print()
print(search_product([df_one.product_group.value_counts().index[0]]))
Размер таблицы:  (63898, 12)

cost             5231.490798
base_sale           0.352718
gender              0.571724
age                39.113368
education           0.816833
personal_coef       0.460050
marketing_one       1.000000
product_group    3464.932345
product_sex_0       0.282841
product_sex_1       0.407415
product_sex_2       0.022035
product_sex_3       0.287709
dtype: float64

{2424: 'кроссовки мужские puma'}

63898 покупок:

- немного больше преобладают мужчины (57%), со средним возрастом 39 лет и средним образованием (81%).

- со средним чеком 5231, умеренная чувствительность к базовой скидке (35%).

- предпочитают разнообразные товары(мужские-41%, женские - 28%, неопределённые - 29%) и чаще кроссовки мужские puma.

Вторая маркетинговая компания, жители города 1134, скидка всем каждое 15-е число месяца (15-й и 45-й день в нашем случае)¶

In [179]:
# удаление ненужных колонок
df_two = df_summary.drop(['id', 'dt', 'has_anomaly', 'no_discount', 'product', 'product_sex', 
              'colour', 'city', 'marketing_one', 'marketing_three'], axis=1)
df_two = df_two[df_two['marketing_two']==1]
print('Размер таблицы: ', df_two.shape)
print()
print(df_two.mean())
print()
print(search_product([df_two.product_group.value_counts().index[0]]))
Размер таблицы:  (10864, 12)

cost             5800.096373
base_sale           0.345637
gender              0.555136
age                39.328056
education           0.835420
personal_coef       0.461422
marketing_two       1.000000
product_group    3401.039488
product_sex_0       0.285622
product_sex_1       0.397367
product_sex_2       0.021171
product_sex_3       0.295839
dtype: float64

{2422: 'кроссовки мужские nike'}

10864 покупок:

- немного больше преобладают мужчины (56%), со средним возрастом 39 лет и средним образованием (84%).

- со средним чеком 5800, умеренная чувствительность к базовой скидке (35%).

- предпочитают разнообразные товары, кроме детских (мужские-40%, женские - 29%, неопределённые - 30%, детские-2%) и чаще кроссовки мужские nike.

Третья маркетинговая компания, жители города 1188¶

In [180]:
# удаление ненужных колонок
df_three = df_summary.drop(['id', 'dt', 'has_anomaly', 'no_discount', 'product', 'product_sex', 
              'colour', 'city', 'marketing_one', 'marketing_two'], axis=1)
df_three = df_three[df_three['marketing_three']==1]
print('Размер таблицы: ', df_three.shape)
print()
print(df_three.mean())
print()
print(search_product([df_three.product_group.value_counts().index[0]]))
Размер таблицы:  (88888, 12)

cost               5433.422543
base_sale             0.360600
gender                0.528744
age                  39.558557
education             0.852545
personal_coef         0.462604
product_group      3425.504568
marketing_three       1.000000
product_sex_0         0.306048
product_sex_1         0.383303
product_sex_2         0.022320
product_sex_3         0.288329
dtype: float64

{2422: 'кроссовки мужские nike'}

88888 покупок:

- немного больше преобладают мужчины (53%), с возрастом 40 лет и средним образованием (85%).

- со средним чеком 5433, умеренная чувствительность к базовой скидке (36%).

- предпочитают разнообразные товары(мужские-38%, женские - 31%, неопределённые - 29%, детские-2%) и чаще кроссовки мужские nike.

In [ ]: